2012-03-31 34 views
5

estoy consiguiendo el errorError que convierte el tipo de datos nvarchar a int

Error al convertir nvarchar tipo de datos a int

Código:

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

Por favor, después la estructura de tblRCDocuments –

+1

que pasan el parámetro de tipo de datos de cadena Regno es que reflejan el error como lo mencionas. Pase el valor de tipo int para regno. –

+1

OK, así que simplemente depure esto: ¿qué valores está pasando al proceso almacenado? ¿Qué sucede si llama a esa instrucción 'INSERT' manualmente, en SQL Server Mgmt Studio, con esos parámetros? –

Respuesta

8

Parece que Regno es un tipo de datos nvarchar en su tabla y ha pasado una int a través de su procedimiento, use un molde y convierta @regno en un nvarchar o cambie el tipo de datos regno por un entero en la tabla.

DECLARE @regnocast NVARCHAR(15) 

SET @regnocast = CAST(@regno AS NVARCHAR) 

Luego, en su SELECT, INSERT y las cláusulas WHERE utilizan @regnocast en lugar de @regno

+0

Gracias a todos por la ayuda – chandu

+1

También: Yo recomendaría especificar siempre una ** longitud ** explícita cuando haces un lanzamiento. De forma predeterminada, si no especifica nada, tendrá 30 caracteres. Si está bien, genial, pero está más claro si tú lo dices: 'CAST (@regno AS NVARCHAR (20))' o lo que sea que necesites ... –

Cuestiones relacionadas