2017-03-21 6 views
1

Beiseite: Bitte beachten Sie, dass dies kein Duplikat der unzähligen anderen String-to-Int-Probleme in SQL ist. Dies ist eine spezielle kryptische Fehlermeldung (mit dem Sternchen), die ein anderes Problem verbirgtSQL-Konvertierung fehlgeschlagen beim Konvertieren des Varchar-Wertes '*' in den Datentyp int

Heute stieß ich auf ein Problem in meinem SQL, das mich den ganzen Tag dauerte, um zu lösen. Ich übergab einen Datentabellenparameter in meine gespeicherte Prozedur und fügte dann einen Teil davon in eine andere Tabelle ein. Der verwendete Code war ähnlich wie die folgenden:

INSERT INTO tblUsers 
    (UserId,ProjectId) 
VALUES ((SELECT CAST(CL.UserId AS int) FROM @UserList AS UL),@ProjectId) 

ich nicht scheinen, um die Fehlermeldung zu erhalten, wenn Testdaten verwenden, nur dann, wenn der Anruf von dem Entwickler-System zu machen.

Was ist das Problem und wie sollte der Code aussehen?

Antwort

2

Ich könnte wetten, dass (SELECT CAST(CL.UserId AS int) FROM @UserList AS UL) mehr als 1 Zeile zurückgibt und Ihr Testszenario hatte nur 1 Zeile. Aber das mag nur ich sein.

Wie auch immer, die Art und Weise sollte der Code aussehen ist:

INSERT INTO tblUsers (UserId,ProjectId) 
SELECT CAST(CL.UserId AS int), 
    @ProjectId 
FROM @UserList AS UL 
1

Nach einiger Zeit des Schleppnetzfangs durch Google und solche Orte, ich habe festgestellt, dass dieser SQL-Code ist fehlerhaft. Ich glaube, der richtige Code etwas mehr wie das ist:

INSERT INTO tblUsers 
    (UserId,ProjectId) 
SELECT CAST(CL.UserId AS int) ,@ProjectId 
    FROM @UserList AS UL 

Das Problem ist, dass die andere Art und Weise, es zu tun versucht, einen Datensatz mit den Daten aller Zeilen in der Tabelle Parametern einzufügen. Ich musste die VALUES-Anweisung entfernen. Auch um andere Daten hinzuzufügen, kann ich das einfach als Teil der Auswahl setzen, wie Sie sonst

würden
Verwandte Themen