2017-06-30 6 views
0

Tabelle ta hat Spalte wie folgt:Sqlserver aktualisieren einen Fix Spaltenwert

a, b, c

und ich dann Spalte d Tabelle ta (Spalte d's Wert Antwort auf folgende Code zu erzeugen)

hinzufügen
select a+'-'+ rtrim(b) +'-'+ cast(row_number() over(order by a) as varchar) +'-tanew' as d from main 

Ich habe versucht, in einfügen, aber es wird den exsits-Wert in Spalte a, b, c abdecken. Wie mache ich die ursprünglichen Daten von a, b, c und einfügen in d wie der oben gezeigte Code?

vielen dank!

hier Endlösung meinem Fall:

update ta set d = [a] +'-' + rtrim([b]) + [c] + '-tanew' 
+1

Fügen Sie einige Beispieltabellendaten und das erwartete Ergebnis hinzu. (Als formatierter Text.) – jarlh

+0

Wenn Sie nur die neue Spalte füllen möchten, sollten Sie nicht einfügen, sondern aktualisieren. –

+0

Wie schreibe ich die WHERE-Anweisung in SQL-Code? wenn ich jede Zeile aktualisieren möchte? thx –

Antwort

0

wenn youre SSMS verwenden, versuchen :::

alter table main 
add d varchar(max) 
update main 
set d = 
(select a+'-'+ rtrim(b) +'-'+ cast(row_number() over(order by a) as varchar) +'-tanew' from main) 

--i assume col a and b are already in varchar format 
+0

bekam Grammatikfehler Hinweis –

+1

Klammern zur letzten Auswahl hinzufügen wird den Grammatikfehler erloschen. kann auch nicht auf diese Weise verwenden, becos der Rückgabewert der Auswahl ist nicht monodromy. Ich werde den CURSOR berücksichtigen? –

+0

können Sie bitte einen Schnappschuss von Tabellendaten zeigen? – PrinceKayastha

0

Sie sollten nicht schaffen und eine Spalte mit row_number Wert aktualisieren. Es ist schwer für die Wartung dieser Spalte, wenn Sie Zeilen einfügen oder löschen oder Spalte aktualisieren a

Nur eine

und wählen Sie Daten

CREATE VIEW dbo.YourViewName AS 
(
    SELECT *, 
     concat(a,'-', b,'-', row_number() over(ORDER BY Name)) AS d 
FROM dbo.YourTable t 
) 

Ansicht verwenden

SELECT * FROM dbo.YourViewName vt 

Hinweis:

  • Row_number wird nur inverwendetoder select Klausel
  • Wenn Sie mit SQL 2012+ verwenden, können Sie concat für Summenzeichenfolgen verwenden.
0

In SQL Server, würden Sie einen aktualisierbaren CTE verwenden:

with toupdate as (
     select t.*, 
      (a + '-' + rtrim(b) + '-' + cast(row_number() over (order by a) as varchar(255)) + '-tanew' 
      ) as new_d 
     from main 
    ) 
update toupdate 
    set d = new_d; 

Hinweis: Wenn Sie varchar() verwenden, sollten Sie immer eine Länge umfassen. SQL Server setzt die Länge basierend auf dem Kontext auf unterschiedliche Werte. Bugs, die sich aus solchen Defaults ergeben, sind ziemlich schwer zu debuggen.

Verwandte Themen