2017-02-24 40 views

回答

0

我會使用遊標創建動態SQL,然後執行該SQL。這對你有用嗎?

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

雖然nscheaffer的回答是有效的,我覺得有義務告訴你,你可以得到完全相同的功能,而無需使用遊標,也同時使用可能會有點更容易實現查詢。

正好連接所有可能出現的問題的共同基礎關閉系統表,然後同時執行它們,就像這樣:

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 
; 

如果您要檢查的SQL運行之前,只是註釋掉EXEC命令並用SELECT取代,如下所示:

SELECT @SQL; 
--EXEC sp_ExecuteSQL @SQL 
;