使用来自其他数据库的数据动态填充变量

时间:2013-09-25 23:57:23

标签: sql sql-server-2008-r2

我有以下代码片段:

   DECLARE @uidSecurity NVARCHAR(25), 
        @sql NVARCHAR(500), 
        @DBName nvarchar(50)= 'DBNAME', 
        @SecurityGroup nvarchar(10) = 'NEWGROUP'

   declare @Winlogon table (
    uidFileNumber nvarchar(25))

   select @sql = ' INSERT INTO @Winlogon
        SELECT uidFileNumber 
        FROM [' + @DBName + '].dbo.SERCURE 
        WHERE code = ''' + @SecurityGroup + ''''

   exec sp_executesql @sql

   SELECT uidFileNumber FROM @WINLOGON

我正在尝试使用来自另一个数据库的数据填充局部变量,该数据随着代码的每个循环而变化。我的问题是它不能将@winlogon表变量识别为在@SQL语句中声明。还有另一种方法可以做到吗?

如果我将静态数据库名称传递给代码,它可以工作,如下所示:

 DECLARE @uidSecurity NVARCHAR(25), 
   @sql NVARCHAR(500), 
   @sql1 NVARCHAR(500), 
   @SecurityGroup nvarchar(10) = 'NEWGROUP'

   declare @Winlogon table (
    uidFileNumber nvarchar(25))

   INSERT INTO @Winlogon
   SELECT uidFileNumber 
   FROM [STATICDB].dbo.SERCURE 
   WHERE code = @SecurityGroup

   SELECT uidFileNumber FROM @WINLOGON

但是每次使用while循环运行代码时,我都需要通过另一个局部变量传递不同的数据库名称。

1 个答案:

答案 0 :(得分:0)

您可以使用INSERT-EXEC:

 DECLARE @uidSecurity NVARCHAR(25), 
     @sql NVARCHAR(500), 
     @sql1 NVARCHAR(500), 
     @SecurityGroup nvarchar(10) = 'NEWGROUP'

 DECLARE @Winlogon TABLE (
     uidFileNumber nvarchar(25))

 SET @sql = N'SELECT uidFileNumber 
    FROM ' + QUOTENAME(@DBName) + '.dbo.SERCURE 
    WHERE code = ' + QUOTENAME(@SecurityGroup, '''')

 INSERT INTO @Winlogon(uidFileNumber)
 EXEC(@sql)