0
我一直在重构一个巨大的动态SQL语句,并认为我可能遇到了障碍。目标是将其参数化。我正在使用SQL Server 2005.使用SQL_VARIANT数据类型参数化动态SQL问题
我有一个int变量(@i
),它确定我需要更新的列。这就是我一直在做:
if @i = 1
begin
set @updateClause = 'Column1 = @newValue';
set @updateClauseDataType = 'varchar(10)';
set @updateValue = @foo;
end
else if @i = 2
begin
set @updateClause = 'Column2 = @newValue';
set @updateClauseDataType = 'int';
set @updateValue = @bar;
end
else if ...
然后,我尝试执行我的发言:
set @statement = N'update ' + @server_name + '.' + @database_name + '.dbo.Table1
set ' + @updateClause + ' where pk = @pk';
set @parameters = '@newValue ' + @updateClauseDataType + ',
@pk uniqueidentifier';
execute sp_executesql @statement,
@parameters,
@newValue = @newValue,
@pk= @pk;
这导致:
从数据类型隐式转换 SQL_VARIANT为varchar不允许。 使用CONVERT功能运行此 查询。
我能解决这个问题,如果我能以某种方式投@updateValue
为正确的类型,我已经以文本形式存储在@updateClauseDataType
。有没有什么办法可以做到这一点,而没有一个巨大的if语句询问@updateClauseDataType
的价值?
我不认为这是在哪里,这是在发生 - 它在“设置”中的一个,读密切。另外,如果myfield被编入索引,这将会提高性能,因为索引无法高效使用... – 2009-11-13 23:21:25
是的,在重读时注意到了,我编辑了答案 – Andomar 2009-11-13 23:22:42