2016-04-13 11 views
1

Dies ist die AbfrageSET innerhalb UPDATE-Anweisung in MSSQL nicht funktioniert

DECLARE @tempvarA INT = 0 
UPDATE Table1 SET @tempvarA = 1 + intColumn, columnA = @tempvarA 

* wird das intColumn ist eine Spalte von Tabelle 1 Er führt erfolgreich die Abfrage aber der Wert von columnA 0 wobei @tempvarA wurde zunächst erklärt. Fehle ich hier etwas oder wird der Wert von @tempvarA erst nach der Ausführung der Update-Anweisung aktualisiert?

Ich habe versucht, die folgenden:

DECLARE @tempvarA INT = 0 
UPDATE Table1 SET @tempvarA = 1 + intColumn 
UPDATE Table1 SET columnA = @tempvarA 

Es funktioniert, aber irgendwie glaube ich, es sollte eine richtige Art und Weise, es zu tun.

+0

Sie müssen kein 'UPDATE' ausgeben, um den Wert einer Variablen zu ändern. Benutz einfach 'SET @tempvarA = 1'. –

+0

Welche Version von SQL Server verwenden Sie? – Sankar

+0

Es funktioniert gut in SQL Server 2000. – Sankar

Antwort

4

Wenn Sie also Ihre Frage richtig verstehen, möchten Sie zunächst eine Variable deklarieren und sie mit einem Wert festlegen und dann den Wert einer Spalte mit dieser Variablen aktualisieren. Nehmen wir es Schritt für Schritt:

1) Deklarieren der Variable:

DECLARE @tempvarA INT; 

2) Einstellen der Variable:

SET @tempvarA = 1; 

3) Aktualisieren Tabelle mit der Variable:

UPDATE Table1 SET columnA = @tempvar1; 

Seien Sie nur vorsichtig. Das oben genannte wird alle Werte von columnA zu der von tempvarA aktualisieren. Wenn Sie bestimmte Zeilen benötigen, müssen Sie in Ihrer UPDATE-Anweisung eine WHERE-Klausel hinzufügen.

+0

Hallo!, Ja deine Antwort ist klar! aber ich kann Schritt 2 nicht ausführen, da ich eine Spalte in Tabelle1 benötige, um Teil meiner Berechnungen für TempvarA zu sein. etwas wie Set tempvarA = 1 + Table1.intColumn. die TempVarA = 1 + Table1.intColumn innerhalb der UPDATE-Anweisung platzieren scheint nicht zu funktionieren – user3770093

+0

Vielen Dank, es funktioniert jetzt! – user3770093

+0

Kannst du es bitte auch als die richtige Antwort akzeptieren? Danke vielmals! –

1

Für

DECLARE @tempvarA INT = 0 
UPDATE Table1 SET @tempvarA = 1, columnA = @tempvarA 

können Sie versuchen,

DECLARE @tempvarA INT = 0 
UPDATE t SET @tempvarA = 1, t.columnA = @tempvarA from My_Table_Name t 

Das ist für mich gut funktioniert.

+0

Hey Danke! Es funktioniert, ich habe herausgefunden, dass die Ursache von etwas anderem kommt, das ist meine Case-Anweisung, die TempVarA nicht korrekt zurückgibt – user3770093

+0

Es funktioniert jetzt vielen Dank! – user3770093