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