2017-02-24 2 views

Antwort

0

Ich würde einen Cursor verwenden, um dynamisches SQL zu erstellen und dann SQL ausführen. Geht das für dich?

DECLARE @SQL NVARCHAR (4000) = '' 
DECLARE @Table_Name NVARCHAR(50) 

DECLARE TableCursor CURSOR FAST_FORWARD READ_ONLY FOR 

SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE COLUMN_NAME LIKE '%MAIL%' 

OPEN TableCursor 

FETCH NEXT FROM TableCursor INTO @Table_Name 

WHILE @@FETCH_STATUS = 0 
BEGIN 

    SET @SQL = @SQL + ' 
    SELECT TOP 10 * FROM ' + @Table_Name + ' 
    GO 
    ' 
    FETCH NEXT FROM TableCursor INTO @Table_Name 
END 

CLOSE TableCursor 
DEALLOCATE TableCursor 

EXECUTE sp_executeSQL @SQL 
0

Während nscheaffer Antwort gültig ist, fühle ich mich verpflichtet, Ihnen zu sagen, dass Sie genau die gleiche Funktionalität erhalten können einen Cursor ohne Verwendung, und auch während einer Abfrage verwendet, die ein bisschen einfacher zu implementieren sein könnte.

verketten einfach alle möglichen Abfragen zusammen, um die Systemtabellen basiert weg und sie dann gleichzeitig ausführen, wie folgt aus:

DECLARE @SQL NVARCHAR(MAX) 
; 
SELECT @SQL = 
    (
    SELECT 'SELECT TOP 10 * FROM ' + OBJECT_NAME(C.Object_ID) + ';' + CHAR(10) 
    FROM sys.Columns C 
    INNER JOIN sys.Tables T 
     ON C.Object_ID = T.Object_ID 
     AND T.is_ms_shipped = 0 
    WHERE C.Name LIKE '%Mail%' 
    GROUP BY C.Object_ID 
    ORDER BY C.Object_ID 
    FOR XML PATH('') 
    ) 
; 
EXEC sp_ExecuteSQL @SQL 
; 

Wenn Sie die SQL überprüfen möchten, bevor es läuft, kommentieren Sie einfach den EXEC Befehl und ersetzen Sie es durch eine SELECT, wie folgt:

SELECT @SQL; 
--EXEC sp_ExecuteSQL @SQL 
; 
Verwandte Themen