Sql 动态表名被识别为列名
以下脚本中的动态架构和表名被识别为列名的原因是什么?如果我在动态脚本之外的模式和表名中硬编码,则函数不会执行任何问题 错误=Msg 207,16级,状态1,第38行 列名“55_数据集”无效。 Msg 207,16级,状态1,第38行 列名“epapority”无效。 在每次迭代中重复 表格示例Sql 动态表名被识别为列名,sql,dynamic-sql,Sql,Dynamic Sql,以下脚本中的动态架构和表名被识别为列名的原因是什么?如果我在动态脚本之外的模式和表名中硬编码,则函数不会执行任何问题 错误=Msg 207,16级,状态1,第38行 列名“55_数据集”无效。 Msg 207,16级,状态1,第38行 列名“epapority”无效。 在每次迭代中重复 表格示例 DECLARE@Counter INT; 声明@DATASET nvarchar(50); 声明@STATE nvarchar(50); 声明@sql nvarchar(最大值); 设置@Counter
DECLARE@Counter INT;
声明@DATASET nvarchar(50);
声明@STATE nvarchar(50);
声明@sql nvarchar(最大值);
设置@Counter=1;
而@Counter SQL server版本
看来没问题
检查代码>设置前
我试试看:
CREATE TABLE EPA_Geocoding_Progress(
Geocoded int
);
CREATE TABLE TEST(
ID int
);
如果您要使用如下打印方式编码:
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;
您将看到问题所在。您能发布遇到的真实消息吗?并标记您正在使用的数据库?确保使用QUOTENAME函数正确生成了状态和数据集变量,并从文本表达式中删除括号。如果某个州的名称中包含“]”,则该州将无法正确解释为“原样”。
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
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;