此代码测试,它的工作原理:
创建一个选择所有的表/列名的光标所在列= 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)? –