以下脚本中的动态架构和表名被识别为列名的原因是什么?如果我在动态脚本之外的模式和表名中硬编码,则该函数不会执行任何问题。
错误=消息207,级别16,状态1,行38 列名称“55_Dataset”无效。 Msg 207,Level 16,State 1,Line 38 列名称'EPAPRIORITY'无效。 每次迭代重复
表示例enter image description here
DECLARE @Counter INT;
DECLARE @DATASET nvarchar(50);
DECLARE @STATE nvarchar(50);
DECLARE @sql nvarchar(max);
SET @Counter = 1;
WHILE @Counter <= 10
BEGIN
SET @DATASET = (Select [DATASET] FROM [xxx].[dbo].[EPA_Geocoding_Progress] Where [INT] = @Counter)
SET @STATE = (Select [STATE] FROM [xxx].[dbo].[EPA_Geocoding_Progress] Where [INT] = @Counter)
SET @sql = '
UPDATE [xxx].[dbo].[EPA_Geocoding_Progress]
Set [Geocoded] = (Select COUNT (*) FROM [xxx].[' + @STATE + '].[' + @DATASET + '])
Where [STATE] = [' + @STATE + '] AND [DATASET] = [' + @DATASET + ']'
exec sp_executesql @sql;
SET @Counter = @Counter + 1;
END
答案 0 :(得分:0)
似乎没问题
在设置
之前检查;
我试试看:
CREATE TABLE EPA_Geocoding_Progress(
Geocoded int
);
CREATE TABLE TEST(
ID int
);
Declare @sql nvarchar(max) = ''
,@STATE nvarchar(max) = 'dbo'
,@DATASET nvarchar(max) = 'test'
Set @sql = '
UPDATE [dbo].[EPA_Geocoding_Progress]
Set [Geocoded] = (Select COUNT (*) FROM [' + @STATE + '].[' + @DATASET + '])'
select @sql
exec sp_executesql @sql; -- Run Success
答案 1 :(得分:-1)
如果您要使用这样的打印代码:
declare @sql varchar(max)
declare @STATE varchar(50)
declare @DATASET varchar(50)
set @STATE = 'dbo'
set @DATASET = 'test'
Set @sql = '
UPDATE [dbo].[EPA_Geocoding_Progress]
Set [Geocoded] = (Select COUNT (*) FROM [' + @STATE + '].[' + @DATASET + '])'
print @sql;
你会看到错误。