T-SQL环境中动态字符串处理中的未知错误。 PS:我将不做任何转换。只想创建一个Update语句并在以后执行
代码:
DROP TABLE IF EXISTS #TEMP
Select 'CRDB_Reporting' tablename,'MagnitudePackage' updatecolumn,'String' updatecolumntype,'''XLFWH''' updatevalue,'NatureOfFundCode' primaryfilter,'String' primaryfiltertype,'''FWH''' primaryfiltervalue,NULL remainingfilter
INTO #TEMP
Select
CASE
WHEN remainingfilter IS NOT NULL THEN
'Update [dbo].[' + tablename +'] Set [' + updatecolumn +'] = ' + updatevalue + ' Where [' + primaryfilter +'] = ' + primaryfiltervalue + ' And ' + remainingfilter
WHEN remainingfilter IS NULL THEN
'Update [dbo].[' + tablename +'] Set [' + updatecolumn +'] = ' + updatevalue + ' Where [' + primaryfilter +'] = ' + primaryfiltervalue + ' And '
END
From #Temp
预期结果
Update [dbo].[CRDB_Reporting] Set [MagnitudePackage] = 'XLFWH' Where [NatureOfFundCode] = 'FWH'
错误消息:
消息245,级别16,状态1,第34行转换时转换失败 varchar值'Update [dbo]。[CRDB_Reporting]设置 [MagnitudePackage] ='XLFWH'其中[NatureOfFundCode] ='FWH'和' 数据类型为int。
答案 0 :(得分:1)
创建列remainingfilter
时,它具有int的隐式转换
要解决此问题,请使用...,cast(NULL as varchar(max)) remainingfilter
也就是说,我会选择 concat()
示例
Select Cmd = concat('Update ',quotename(tablename),' set ',quotename(updatecolumn),' = ',updatevalue,' And ' + nullif(remainingfilter,''))
From #Temp
返回
Update [CRDB_Reporting] set [MagnitudePackage] = 'XLFWH'