动态sql中用作前缀和值的局部变量

动态sql中用作前缀和值的局部变量,sql,sql-server,dynamic-sql,Sql,Sql Server,Dynamic Sql,我使用局部变量在不同的数据库中滚动。我试图使当前变量值显示在结果集中。当变量仅用作DB前缀时,它工作正常,但当我将硬编码的DB名称从 SET @sqlqueryNILS = 'SELECT ''A1'' AS SourceDB, NilConts FROM ' + @ODSname + '..MyTable' 到 无论我使用多少额外的引号,它都会失败,并出现以下错误 'Msg 207, Level 16, State 1, Line 1 Invalid column name 'A1'. Ms

我使用局部变量在不同的数据库中滚动。我试图使当前变量值显示在结果集中。当变量仅用作DB前缀时,它工作正常,但当我将硬编码的DB名称从

SET @sqlqueryNILS = 'SELECT ''A1'' AS SourceDB, NilConts FROM ' + @ODSname + '..MyTable'

无论我使用多少额外的引号,它都会失败,并出现以下错误

'Msg 207, Level 16, State 1, Line 1
Invalid column name 'A1'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'B2'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'C3''
查询:

CREATE TABLE #ODS_NILS(SourceDB NVARCHAR(6), NilConts INT)
CREATE TABLE A1..MyTable(NilConts INT)
INSERT INTO A1..MyTable SELECT 22
CREATE TABLE B2..MyTable(NilConts INT)
INSERT INTO B2..MyTable SELECT 24
CREATE TABLE C3..MyTable(NilConts INT)
INSERT INTO C3..MyTable SELECT 25

DECLARE @odslist TABLE (id INT IDENTITY(1,1),ODSDB NVARCHAR(20))                        
DECLARE @count INT = 1                      
DECLARE @total INT                      
INSERT INTO @odslist SELECT 'A1' UNION SELECT 'B2' UNION SELECT 'C3'                    

SELECT @total = MAX(id) FROM @odslist                       
WHILE @count <= @total                      
BEGIN                       
DECLARE @ODSname NVARCHAR(20), @sqlqueryNILS NVARCHAR(max)              
SELECT @ODSname = ODSDB FROM @odslist WHERE id = @count 


SET @sqlqueryNILS = 'SELECT ''A1'' AS SourceDB, NilConts FROM ' + @ODSname + '..MyTable'

INSERT INTO #ODS_NILS EXEC(@sqlqueryNILS)       
SET @sqlqueryNILS = NULL        
SET @count=@count+1;                
END;

SELECT * FROM #ODS_NILS

sqlqueryNILS是nvarchar所以

SET @sqlqueryNILS = N'SELECT

脚本中没有名为MyTable的表!“+”…MyTable”的作用是什么?这实际上并不重要,因为它存在于不同的数据库中,但好的,添加了这个。MyTable是查询所针对的源表。它存在于十几个数据库中。我需要结果集中的NilConts值和数据库名称。那么您实际上是从“++@ODSname+”…MyTable运行此脚本?或者只是在@ODSname?
SET @sqlqueryNILS = N'SELECT