You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决SQL Server动态SQL执行时nvarchar转int类型转换失败错误

问题根因

本次类型转换错误的核心原因有3个:

  • 特征规则配置错误:TAllfeatures表中ZfeatureKey=1505730036的判断逻辑是数值比较>1000,但你把它的IsNumericValues属性设为0,导致拼接SQL时错误用字符串类型的Name字段和数值1000做比较,SQL Server会自动尝试把Name字段的24VAC/DC转成int,触发转换失败报错。
  • 动态SQL拼接逻辑未区分字段类型:字符串类型的判断值和数值类型的判断字段混用,没有做明确的类型区分。
  • 之前的修复逻辑错误:你尝试的修改给bigint类型的ZfeatureKey加了单引号,还错误拆分了EStrat的结构,不仅没有解决类型转换问题,还导致判断逻辑完全错乱。

修复方案

第一步:修正特征规则的基础配置

先把数值比较类的特征IsNumericValues属性修正为1,匹配它的判断逻辑:

UPDATE dbo.TAllfeatures 
SET IsNumericValues = 1 
WHERE ZfeatureKey = 1505730036

第二步:修正动态SQL拼接逻辑

调整@ConStr的拼接规则,根据IsNumericValues自动选择判断字段,同时替换EStrat里的HTML转义字符:

DECLARE @ConStr nvarchar(max) = STUFF((
    SELECT CONCAT(
        ' Or (PM.ZfeatureKey = ', CC.ZfeatureKey, 
        -- 根据属性自动选择判断字段:数值类型用AcceptedValuesOption_Value,字符串类型用Name
        IIF(AL.IsNumericValues = 1, ' And AcceptedValuesOption_Value ', ' And Name '),
        -- 替换HTML转义的大于号
        REPLACE(CAST(EStrat AS NVARCHAR(2500)), '>', '>'),
        ')'
    )
    FROM dbo.TCondition CC  
    INNER JOIN dbo.TAllfeatures AL WITH(NOLOCK) ON AL.ZfeatureKey = CC.ZfeatureKey
    FOR XML PATH(''), TYPE
).value('(./text())[1]','nvarchar(max)'),1,3,'')

第三步:调整最终执行的SQL拼接逻辑

避免隐式类型转换,先统计规则数量再拼接:

DECLARE @RuleCount INT = (SELECT COUNT(1) FROM TCondition WITH(NOLOCK))
DECLARE @Sql nvarchar(max)= CONCAT(
    'INSERT INTO dbo.TAllData(PartID,Code,CodeTypeID,RevisionID,ZPLID ,ConCount)',
    ' SELECT  PartID,Code,Co.CodeTypeID,Co.RevisionID,Co.ZPLID,Count(1) as ConCount
    FROM 
    dbo.TPartAttributes PM WITH(NOLOCK) 
    INNER JOIN dbo.TCondition Co WITH(NOLOCK) ON Co.ZfeatureKey = PM.ZfeatureKey ',
    'Where (1=1 and ' ,  @ConStr,' ) 
    Group By PartID,Code,Co.CodeTypeID,Co.RevisionID,Co.ZPLID 
    Having Count(1) >= ', CAST(@RuleCount AS NVARCHAR(10))
)
-- 可先打印生成的SQL校验逻辑是否正确
-- PRINT @SQL
EXEC (@SQL)

内容的提问来源于stack exchange,提问作者abeer shlby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:36:01