2012-03-31 22 views
5

sto ottenendo l'erroreErrore che converte il tipo di dati nvarchar a int

Errore che converte il tipo di dati nvarchar a int

Codice:

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

Si prega di inviare la struttura di tblRCDocuments –

+1

si passa il parametro per Regno dista stringa tipo di dati che riflettono l'errore come si parla. Passa il valore del tipo int per regno. –

+1

OK, quindi fai il debug di questo - quali valori stai passando nel processo memorizzato ?? Cosa succede se si chiama manualmente l'istruzione 'INSERT', in SQL Server Mgmt Studio, con questi parametri ?? –

risposta

8

Sembra regno è un tipo di dati nvarchar in la tua tabella e hai passato un int tramite la tua procedura, o usa un cast e converti @regno in un nvarchar o cambia il tipo di dati del regno in un numero intero nella tabella.

DECLARE @regnocast NVARCHAR(15) 

SET @regnocast = CAST(@regno AS NVARCHAR) 

Poi, nel tuo SELECT, INSERT e le clausole WHERE utilizzano @regnocast piuttosto che @regno

+0

Grazie a tutti per l'aiuto – chandu

+1

Inoltre: mi raccomando di specificare sempre una ** lunghezza ** esplicita quando si esegue un cast. Per impostazione predefinita, se non si specifica nulla, saranno 30 caratteri. Se va bene, è bello, ma è più chiaro se lo dici tu: 'CAST (@regno AS NVARCHAR (20)) 'o qualsiasi altra cosa tu abbia bisogno ... –

Problemi correlati