问题:我有一个表,让我们用其他属性(TableName,ColumnName)调用AllColumns。
现在,我想要实现的是为该表的每个记录生成一个select语句。
在伪代码中:
for (table, column) in (select TableName, ColumnName from AllColumns) do
select 'table', column from table where column like '%blah%'
end for
你能帮忙吗?
答案 0 :(得分:0)
您可以使用WHILE
循环和临时表。因此,您将所有记录提取到临时表中,然后遍历记录以执行您要执行的选择或任何进程,如下所示;
DECLARE @TempTable TABLE
(
ID INT IDENTITY(1,1),
Table Varchar(100),
Column Varchar(100)
)
INSERT INTO @TempTable
SELECT Table, Column FROM AllColumns
DECLARE @LOOP INT
DECLARE @COUNT INT
SET @LOOP = 0
SET @COUN = 1
SELECT @LOOP = COUNT(1) FROM @TempTable
WHILE @COUNT <= @LOOP
BEGIN
select 'table', column from @TempTable
where column like '%blah%'
and ID = @COUNT
SET @COUNT = @COUNT + 1
END
答案 1 :(得分:0)
你可以使用动态SQL执行此操作:
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = (SELECT 'SELECT [Table] = ''' + TableName + ''', ' +
' [Column] = ''' + ColumnName + ''' ' +
'FROM ' + TableName + ' ' +
'WHERE ' + ColumnName + ' LIKE ''%blah%'';'
FROM AllColumns
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)');
EXECUTE sp_executesql @SQL;
但是,仅仅因为你可以做某事,并不意味着你应该 - 你说过AllColumns有数千个条目,因此你运行数千个短查询,每个短查询生成它自己的结果集。我无法想到许多需要这种情况的场景。