2017-04-11 5 views
0

abhängt ich gleichzeitig zwei Spalten einer Tabelle aktualisieren möchten, wo Spalte B auf Spalte A abhängig istSQL - Aktualisieren zwei Spalten, in denen man auf andere

Bevor Update

ColA ColB 

A11 NULL 

B22 NULL 

C33 NULL 

D44 NULL 

Nach Update

ColA ColB 

11 A 

22 B 

33 C 

44 D 

ich writning die Update-Anweisung als

UPDATE tbl SET ColA = STUFF(ColA,1,1,''), ColB = LEFT(ColA, 1) 

Hier ColB sollte vor ColA aktualisiert werden, die für kleine Ergebnismenge funktioniert. Aber wie wird es sich verhalten, wenn es eine große Anzahl von Datensätzen gibt? Erfolgt das SQL-Update zufällig?

Ich bin mir wirklich nicht sicher, ob ColA nur aktualisiert wird, wenn das ColB-Update abgeschlossen ist. Dies kann durch CTE erreicht werden, aber ich möchte wissen, wie das Update hier wirklich funktioniert.

+0

sollten Sie wahrscheinlich eine Funktion oder einen Trigger für diese – iPhantomGuy

+0

schreiben Ich habe die Abfrage mit mir, die perfekt funktioniert ie. mit CTE. Ich möchte wissen, gibt es eine Chance, wo ColA vor ColB für eine Zeile aktualisiert wird? –

Antwort

0
BEGIN TRAN 
Create Table #Temp (ColA NVARCHAR(10),ColB NVARCHAR(10)) 

INSERT INTO #Temp 
SELECT 'A11', NULL UNION ALL 
SELECT 'B22', NULL UNION ALL 
SELECT 'C33', NULL UNION ALL 
SELECT 'D44' , NULL 


SELECT * FROM #Temp 
UPDATE #Temp SET ColA=SUBSTRING(ColA,2,2),ColB=SUBSTRING(ColA,1,1) 

SELECT * FROM #Temp 
ROLLBACK TRAN 
+0

Danke für die Antwort. Dies kann auch mit CTE erreicht werden. Mein Anliegen ist eine einzelne Update-Anweisung, die ich oben angegeben habe. Wird es ein Problem damit geben? –

+0

NEIN Es wird kein Problem geben Wenn Sie nicht sicher sind, nehmen Sie die Änderungen in der Temp-Tabelle und überprüfen Sie es. Wenn alles korrekt erscheint, können Sie auch Änderungen an User_Table vornehmen. –

0

Es wird überhaupt kein Problem geben. SQL ist deklarativ und wird Ihre Aussage irgendwie funktionieren lassen.

Für lacht (oder Vertrauensbildung) versuchen SET a=b, b=a

Es werden die Werte jedoch zu einer prozeduralen mindset tauschen sollte es nicht.

Verwandte Themen