此代碼測試,它的工作原理:
創建一個選擇所有的表/列名的光標所在列= ID(我們不需要列變量,因爲您只針對'ID',但是我包含它以防您或其他人需要更多功能)。
一旦你存儲了這些信息,你就可以遍歷遊標並執行動態SQL。請注意,這對SQL注入很敏感,幾乎所有動態SQL都是如此。
此方法將爲每個具有列ID的表提供單獨的數據表 - 即使沒有符合條件的ID列(您將只爲這些表獲得空白數據表)。
此外,您可以根據需要更改變量的大小。
如果您需要任何澄清或修改,請讓我知道。
DECLARE @TableName varchar(255), @ColumnName varchar(255), @SQL varchar(1000)
DECLARE TempCursor CURSOR FOR
SELECT T.[name] AS [TableName], C.[name] AS [ColumnName]
FROM sys.tables T
JOIN sys.columns C
ON T.object_id = C.object_id
WHERE C.[name] = 'ID'
OPEN TempCursor
FETCH NEXT FROM TempCursor INTO @TableName, @ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'SELECT * FROM ' + @TableName
SET @SQL = @SQL + ' WHERE ' + @ColumnName + ' like ''a%'''
EXECUTE (@SQL)
FETCH NEXT FROM TempCursor INTO @TableName, @ColumnName
END
CLOSE TempCursor
DEALLOCATE TempCursor
你可能想看看這個SO後 - [?如何設置動態SQL查詢的表名(https://stackoverflow.com/questions/20678725/how-to-set-table -name-in-dynamic-sql-query) –
這可能是你正在尋找的第二個難題[查詢結果中的T-SQL循環](https://stackoverflow.com/questions/11852782/t-sql-循環查詢結果)以防萬一您不熟悉它。我想你可以把它放在一起。 –
爲什麼在您的示例中包含Table3,它缺少您定位的列(ID)? –