将数据类型nvarchar转换为int时出错

6

我遇到了一个错误:

将数据类型 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
请发布tblRCDocuments的结构。 - Chetter Hummin
1
你传递的 regno 参数是字符串数据类型,这反映了你提到的错误。请传递 int 类型的值给 regno。 - Ghost Answer
1
好的,那就调试一下这个程序——你传递给存储过程的值是什么??如果你在 SQL Server Mgmt Studio 中手动调用这个 INSERT 语句,并使用这些参数,会发生什么?? - marc_s
1个回答

9

看起来您的表中regno是nvarchar数据类型,并且您已经通过存储过程传递了一个int类型的值。您可以使用cast和convert将@regno转换为nvarchar,或者在表中将regno数据类型更改为整数。

DECLARE @regnocast NVARCHAR(15)

SET @regnocast = CAST(@regno AS NVARCHAR)

然后在您的 SELECT、INSERT 和 WHERE 子句中使用 @regnocast 而不是 @regno。


感谢大家的帮助。 - chandu
1
另外,我建议在进行转换时始终指定明确的长度。如果您不指定任何内容,默认情况下它将是30个字符。如果可以接受,则很好,但如果您明确说明了需要多长的长度,那就更加清晰:CAST(@regno AS NVARCHAR(20))或者您所需的任何长度... - marc_s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接