简体   繁体   English

SQL更新查询无法将nvarchar转换为整数

[英]SQL update query fails to convert nvarchar to integer

The following query should return records that consist of 3 or 4 digits that are converted from nvarchar to integer and are lower than 1200. Instead of a desired result, an error returns stating: Conversion failed when converting the nvarchar value '' to data type int. 以下查询应返回由3或4位数字组成的记录,这些记录将从nvarchar转换为整数且小于1200。返回的错误不是所期望的结果,而是指出:将nvarchar值''转换为数据类型int时转换失败。

UPDATE cvUpd
SET cvUpd.visible = case when CONVERT(int, cvFrom.ConfigText) < 1200 then 0 else 1 end
FROM ConfigValue cvUpd
INNER JOIN OptionRestriction r ON cvUpd.ConfigurationID=67061
   AND cvUpd.FeatureID = r.Feature_ID_2
   AND cvUpd.OptionValue= r.OptionValue_2
INNER JOIN ConfigValue cvFrom ON cvFrom.FeatureID =r.Feature_ID_1  
   AND cvFrom.ConfigurationID = cvUpd.ConfigurationID 
   AND cvFrom.OptionValue=r.OptionValue_1 
   AND cvFrom.ConfigText=r.value
   AND cvFrom.ConfigText NOT LIKE '%[^0-9]%' 
   AND (LEN(cvFrom.ConfigText) = 3 or LEN(cvFrom.ConfigText) = 4)

I also tried to run a select query, but this query resulted in the same error: 我也尝试运行选择查询,但是此查询导致了相同的错误:

SELECT CONVERT(int, cvFrom.ConfigText)
FROM ConfigValue cvUpd
INNER JOIN OptionRestriction r ON cvUpd.ConfigurationID=67061
   AND cvUpd.FeatureID = r.Feature_ID_2
   AND cvUpd.OptionValue= r.OptionValue_2
INNER JOIN ConfigValue cvFrom ON cvFrom.FeatureID =r.Feature_ID_1  
   AND cvFrom.ConfigurationID = cvUpd.ConfigurationID 
   AND cvFrom.OptionValue=r.OptionValue_1 
   AND cvFrom.ConfigText=r.value
   AND cvFrom.ConfigText NOT LIKE '%[^0-9]%' 
   AND (LEN(cvFrom.ConfigText) = 3 or LEN(cvFrom.ConfigText) = 4)

UPDATE 更新

It appears that I get the same error even without using convert: 似乎即使不使用convert也会出现相同的错误:

SELECT cvFrom.ConfigText
FROM ConfigValue cvUpd
INNER JOIN OptionRestriction r ON cvUpd.ConfigurationID=67061
   AND cvUpd.FeatureID = r.Feature_ID_2
   AND cvUpd.OptionValue= r.OptionValue_2
INNER JOIN ConfigValue cvFrom ON cvFrom.FeatureID =r.Feature_ID_1  
   AND cvFrom.ConfigurationID = cvUpd.ConfigurationID 
   AND cvFrom.OptionValue=r.OptionValue_1 
   AND cvFrom.ConfigText=r.value
   AND cvFrom.ConfigText NOT LIKE '%[^0-9]%' 
   AND (LEN(cvFrom.ConfigText) = 3 or LEN(cvFrom.ConfigText) = 4)

The problem was that r.value was an integer that was joined with the nvarchar "cvFrom.ConfigText". 问题是r.value是与nvarchar“ cvFrom.ConfigText”连接的整数。 I therefore needed to edit AND cvFrom.ConfigText=r.value to AND cvFrom.ConfigText=CONVERT(nvarchar(max), r.value) . 因此,我需要将AND cvFrom.ConfigText=r.value编辑为AND cvFrom.ConfigText=CONVERT(nvarchar(max), r.value)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM