2017-07-24 7 views
0

Mein Problem ist, dass ich eine varchar(4000) Typvariable nicht zuordnen kann, um in einer gespeicherten Prozedur abzufragen.SQL Server-Fehlercode 245 (Konvertierung beim Konvertieren von varchar in int fehlgeschlagen)

Ich versuchte viele Dinge, um es funktioniert zu bekommen, verschiedene Kombinationen mit Anführungszeichen, aber keine Chance.

Hier ist mein Verfahren:

@sirketkodu varchar(30) , 
@degerler varchar(4000), 
@ORA_KULLANICI_KODU varchar(30) , 
@ORA_KULLANICI_TIPI varchar(30) , 
@ORA_KULLANICI_BIRIMI varchar(30) , 
@ORA_KULLANICI_ROLU varchar(50) , 
@ORA_KULLANICI_SUBE varchar(30) , 
@ORA_KULLANICI_SIRKET varchar(30) , 
@ORA_KULLANICI_UZMAN varchar(30) , 
@ORA_KULLANICI_EPOSTA varchar(50) , 
@ORA_BASVURU_KESIN_KOSUL varchar(1000), 
@ORA_TARIH varchar(30) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SET DATEFORMAT DMY; 
BEGIN 
    UPDATE sirket 
    SET bolgeler = '' + CAST(@degerler AS VARCHAR(4000)) + '', 
     kullanici = @ORA_KULLANICI_KODU, 
     tarih = @ORA_TARIH 
    WHERE kod = @sirketkodu 
END 

Diese Codezeile:

bolgeler ='' + CAST(@degerler AS VARCHAR(4000)) + '' 

das Problem verursacht. Ich habe versucht, die folgenden:

bolgeler = @degerler, 
bolgeler = '@degerler', 
bolgeler = '' + @degerler + '', 
bolgeler = CAST(@degerler AS VARCHAR(4000)), 
bolgeler = ''' + @degerler + ''', 

Meine @degerler Daten ist eine serialisierte Reihe von PHP-Array wie folgt:

string(23) "a:1:{s:2:"gd";s:1:"E";}" 

und der Fehler ist:

Fehler bei der Konvertierung während varchar Umwandlung in int

Danke

+0

Die Art des Bolgelers ist int? – sepupic

+0

in der Datenbanktabelle ist es varchar (1000). in der Prozedur ist es varchar (4000) –

+0

Bitte geben Sie das Schema für das Ziel des Updates: 'sirket' – Tanner

Antwort

1

Von dem, was ich sagen kann, konvertieren Sie zu viel. Sie haben die Variable

@degerler varchar(4000), 

und Sie versuchen, dies zu tun:

bolgeler ='' + cast(@degerler as varchar(4000)) + '', 

Warum werden die leeren Varchars benötigt?

Jetzt für Sie Problem, gibt es einige Wert in @degerler, die nicht in int konvertiert werden kann, ist es so einfach.

versuchen Sie dies:

declare @degerler varchar(4000) = '123' 
declare @bolgeler int 
set @bolgeler = '' + cast(@degerler as varchar(4000)) + '' 
select @bolgeler 

das Ergebnis wird sein, 123

jetzt versuchen, diese:

declare @degerler varchar(4000) = '123A' 
declare @bolgeler int 
set @bolgeler = '' + cast(@degerler as varchar(4000)) + '' 
select @bolgeler 

Jetzt werden Sie diese Fehlermeldung erhalten Sie bekommen.

Aber ich vermute, Sie haben uns nicht den ganzen Code gezeigt, weil Sie Konvertiten machen, die nicht notwendig sind. Sie können auch ohne convert wie dies ein varchar in einen int setzen:

declare @degerler varchar(4000) = '123' 
declare @bolgeler int 
set @bolgeler = @degerler 
select @bolgeler 

So gibt entweder ein Wert in @degerler ist, die int nicht konvertiert werden können, oder Sie sind uns nicht alle Code zeigt.

Eine andere Möglichkeit ist, dass eines der Felder in der Tabelle sirket, die Sie aktualisieren, vom Typ int ist und Sie versuchen, einen Varchar-Wert in sie zu setzen, der nicht konvertiert werden kann.

Für bessere Antworten müssen Sie Beispieldaten und beide Tabellenstrukturen bereitstellen.

+0

Danke für die Antwort, tatsächlich habe ich @ Degerler und @ sirketkodu Variablen Vertauscht von PHP, das war die Ursache des Problems. Ich meine, wie @ degerler = 1 und @ sirketkodu = 'a: 1: {s: 2: "gd"; s: 1: "E";} –

Verwandte Themen