SELECT TOP 10
*
FROM
(SELECT
COLUMN_NAME, TABLE_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
COLUMN_NAME LIKE '%MAIL%')
我想從我的搜索中的每個表中獲得前10行。有任何想法嗎? SQL Server 2008 R2如何從information.schema.columns列表中選擇前10行
SELECT TOP 10
*
FROM
(SELECT
COLUMN_NAME, TABLE_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
COLUMN_NAME LIKE '%MAIL%')
我想從我的搜索中的每個表中獲得前10行。有任何想法嗎? SQL Server 2008 R2如何從information.schema.columns列表中選擇前10行
我會使用遊標創建動態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
雖然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
;