我有以下代码片段:
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循环运行代码时,我都需要通过另一个局部变量传递不同的数据库名称。
答案 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)