2012-03-31 75 views
5

我收到错误错误转换数据类型为nvarchar成int

错误转换数据类型为nvarchar成int

代码:

ALTER procedure [dbo].[sp_rcdoc] 
    @regno int, 
    @appname varchar(50), 
    @DOI datetime, 
    @COV varchar(50), 
    @validtill date, 
    @imgloc varchar(500), 
    @ImagNo char(20), 
    @Purposecode varchar(50), 
    @FLAG varchar(3) 
AS BEGIN 
    IF NOT EXISTS(SELECT regno FROM tblRCDocuments WHERE regno = @regno) 
    BEGIN 
     INSERT INTO tblRCDocuments(regno, appname, DOI, COV, validtill, imgloc, ImagNo, Purposecode, FLAG) 
     VALUES(@regno, @appname, @DOI, @COV, @validtill, @imgloc, @ImagNo, @Purposecode, @FLAG) 
    END 
+1

请张贴 – 2012-03-31 07:28:11

+1

你传递参数REGNO tblRCDocuments的结构是字符串数据类型,你提到这反映错误。传递regno的int类型值。 – 2012-03-31 07:30:31

+1

好的,只需调试一下 - 你传入存储过程的值是什么?如果你在SQL Server Mgmt Studio中手动调用那个'INSERT'语句,那些参数怎么办? – 2012-03-31 08:00:42

回答

8

貌似REGNO是一个nvarchar数据类型你的表,你已经通过你的过程传递了一个int,或者使用一个强制转换并将@regno转换为nvarchar,或者将regno数据类型更改为表中的整数。

DECLARE @regnocast NVARCHAR(15) 

SET @regnocast = CAST(@regno AS NVARCHAR) 

然后在你的SELECT,INSERT和WHERE子句使用@regnocast而不是@regno

+0

感谢每一位的帮助 – chandu 2012-03-31 08:46:14

+1

另外:我会建议总是指定一个明确的**长度**当你做演员。默认情况下,如果你不指定任何内容 - 它将会是30个字符。如果这很好 - 很好 - 但是如果你这样说的话更清楚:'CAST(@regno AS NVARCHAR(20))'或者任何你需要的东西...... – 2012-03-31 09:56:15

相关问题