2012-03-22 70 views
1

我是一个newby在SQL和可以找到问题与我的查询,我得到这个错误: Msg 245,Level 16,State 1,第10行 将nvarchar值“00999-00-210312-11”转换为数据类型int时转换失败。我不能得到这个错误修正:转换nvarchar值时转换失败

Declare @Referenceid Int 

SET @Referenceid = (
        SELECT TOP 1 (CASE WHEN ad.ReferenceID LIKE '%NO ID%' THEN (RIGHT(MAX(ad.ReferenceID),2)+10)END) 
        FROM Campaign.dbo.Assets_DailyBulkImport AS ad 
        WHERE (ad.ReferenceID IS NOT NULL) 
        GROUP BY ad.ReferenceID 
        ORDER BY ad.ReferenceID DESC); 

Select (c.Note + '' + '999' + N'-' + '00' + N'-' + 
         (SELECT  REPLACE(CONVERT(VARCHAR(8), GETDATE(), 3), '/', '') AS MMDDYY) + N'-' + @Referenceid) 
        FROM Assets_DailyBulkImport AS a INNER JOIN 
         Controls_Profiles AS c ON a.Profile = c.Venture 
        where [email protected] 
+0

不froget标记如果你得到你想要的信息 – 2012-03-22 11:23:34

回答

1

它表示'00999-00-210312-11'是一个字符串值,您不能将其转换为整数值。正如你所看到的 - 是数据的一部分,所以它必须是字符串,即varchar不是它的整数值,因为它给出错误的原因。

所以解决您错误,您需要更改此行

(SELECT  REPLACE(CONVERT(VARCHAR(8), GETDATE(), 3), '/', '') AS MMDDYY) + N'-' 
+ cast(@Referenceid as varchar(10)) 

在你的代码@Referenceid是整数值,你不能直接添加它,你首先需要将其转换像cast(@Referenceid as varchar(10))

+0

谢谢你的回复...我做了你的建议,并仍然给我同样的错误 – user1285520 2012-03-23 10:40:01

+0

@ user1285520 - aslo改变这个(RIGHT(MAX(ad.ReferenceID),2 )+10)END)作为cast((RIGHT(MAX(ad.ReferenceID),2)+10)END)as varchar(20))可能会重新处理您的问题。 – 2012-03-23 11:08:31