2012-03-31 10 views
5

Dostaję błęduBłąd konwersji typu danych nvarchar int

Błąd podczas konwersji typu danych nvarchar int

Kod:

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

proszę pisać strukturę tblRCDocuments –

+1

ty przechodzących parametr dla Regno jest ciąg typ danych, które odzwierciedlają błąd jak wspomniałeś. Podaj wartość typu int dla regno. –

+1

OK, więc po prostu debuguj to - jakie wartości przechodzisz do zapisanego proc? Co jeśli wywołasz ręcznie instrukcję 'INSERT', w SQL Server Mgmt Studio, z tymi parametrami? –

Odpowiedz

8

Wygląda Regno jest to typ danych nvarchar w do twojej tabeli i przekazałeś int poprzez twoją procedurę, użyj rzutowania i skonwertuj @regno na nvarchar lub zmień typ danych regno na liczbę całkowitą w tabeli.

DECLARE @regnocast NVARCHAR(15) 

SET @regnocast = CAST(@regno AS NVARCHAR) 

Następnie w SELECT, INSERT i WHERE używać @regnocast zamiast @regno

+0

Dzięki wszystkim za pomoc – chandu

+1

Ponadto: Zalecam, aby zawsze podawać wyraźną ** długość ** podczas wykonywania rzutowania. Domyślnie, jeśli niczego nie określisz, będzie to 30 znaków. Jeśli to dobrze - świetnie - ale jest wyraźniej, jeśli powiesz tak: 'CAST (@regno AS NVARCHAR (20))' lub cokolwiek potrzebujesz ... –

Powiązane problemy