迭代查找特定值的一系列数据库

时间:2013-06-28 17:58:30

标签: sql sql-server

我正在构建一个可以在任何MS SQL Server上运行的SQL脚本,其中将发生以下情况:

将使用ID#,dbname和已处理的临时表构建?列。

然后,系统将使用dbname作为SQL语句的一部分,遍历临时表中的每一行。

这就是我目前的情况:

DECLARE @ID INT
CREATE TABLE #DBNAME (ID varchar(3), dbname varchar(100), processed varchar(1))
BEGIN
INSERT INTO #DBNAME(ID, dbname)
SELECT database_id, name FROM sys.databases
END
BEGIN
UPDATE #DBNAME SET processed = '0'
WHERE dbname IS NOT NULL
END
BEGIN


END
select * from #DBNAME
WHILE (SELECT COUNT(*) From #DBNAME Where processed = 0) > 0
BEGIN
    SELECT TOP 1 @ID = ID from #DBName Where processed = 0
    select * from [#DBNAME.dbname].installinfo where installed='Success'

目前,#DBName.dbname.installinfo无效,因为它不是有效对象,我不知道如何做到这一点。该脚本不会在那里完成,就像select语句返回的行数多于零一样,它需要收集额外的信息,但我想我可以把它放得很好,如果我能让[#DBNAME.dbname]部分正确的话所以我可以开始在迭代数据库中工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您需要使用动态sql将表中的值用作另一个查询中的表名,即:

DECLARE @sql VARCHAR(8000),@tblname VARCHAR(255)
SET @tblname = SELECT stuff FROM Table
SET @sql = 'select * from '+@tblname+' where installed=''Success''
           '

EXEC (@sql)

答案 1 :(得分:1)

我建议写一个动态的sql语句:

DECLARE @dbname AS NVARCHAR(MAX);
  SELECT @dname = name FROM #DBNAME其中ID = @ID;
  将@sql声明为NVARCHAR(MAX);
  SET @sql ='SELECT * FROM'+ @dbname +'。installinfo where installed =''Success''';

  EXEC sp_executesql @sql;