【问题标题】:Getting "Conversion Failed" Error in SQl Server在 SQL Server 中出现“转换失败”错误
【发布时间】:2019-06-18 13:53:54
【问题描述】:

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'

错误信息:

Msg 245, Level 16, State 1, Line 34 转换时转换失败 varchar 值 '更新 [dbo].[CRDB_Reporting] 设置 [MagnitudePackage] = 'XLFWH' 其中 [NatureOfFundCode] = 'FWH' 和 ' 数据类型为 int。

【问题讨论】:

    标签: tsql


    【解决方案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'
    

    【讨论】:

      猜你喜欢
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多