在SQl Server中获取“转换失败”错误

时间:2019-06-18 13:53:54

标签: tsql

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。

1 个答案:

答案 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'