使用另一个表中的数据生成sql select语句

时间:2014-10-27 14:23:10

标签: sql sql-server-2008 tsql

问题:我有一个表,让我们用其他属性(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

你能帮忙吗?

2 个答案:

答案 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有数千个条目,因此你运行数千个短查询,每个短查询生成它自己的结果集。我无法想到许多需要这种情况的场景。