it-swarm.com.de

Wie kann ich diese berechnete Spalte in SQL Server 2008 ändern?

Ich habe eine berechnete Spalte mit der folgenden Zeile erstellt:

alter table tbPedidos 
add restricoes as (cast(case when restricaoLicenca = 1 or restricaoLote = 1 then 1 else 0 end as bit))

Aber jetzt muss ich diese Spalte für etwas ändern:

alter table tbPedidos 
alter column restricoes as (cast(case when restricaoLicenca = 1 or restricaoLote = 1 or restricaoValor = 1 then 1 else 0 end as bit))

Aber es funktioniert nicht. Ich versuche, eine andere Bedingung in die case-Anweisung einzugeben, aber sie funktioniert nicht.

Danke vielmals!

52
AndreMiranda

Wenn Sie versuchen, eine vorhandene Spalte zu ändern, können Sie ADD nicht verwenden. Versuchen Sie stattdessen Folgendes:

alter table tbPedidos alter column restricoes as (cast (Fall, wenn residicaoLicenca = 1 oder residicaoLote = 1 oder residicaoValor = 1, dann 1 else 0 als Bit beenden))

EDIT: Das obige ist falsch. Wenn Sie eine berechnete Spalte ändern, können Sie sie nur löschen und erneut hinzufügen .

66
Michael Todd

Etwas wie das:

ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn

ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn + 10

Quelle

67

Dies ist eine der Situationen, in denen es einfacher und schneller ist, einfach die Funktion Diagramm von SQL Server Management Studio zu verwenden.

  1. Erstellen Sie ein neues Diagramm, fügen Sie Ihre Tabelle hinzu und wählen Sie, ob die Formelspalte in der Tabellenansicht des Diagramms angezeigt werden soll.
  2. Ändern Sie die Spaltenformel in eine leere Zeichenfolge ('') oder etwas ähnlich Unschädliches (wahrscheinlich so, dass Sie den Datentyp der Spalte nicht ändern).
  3. Speichern Sie das Diagramm (das die Tabelle speichern soll).
  4. Ändere deine Funktion.
  5. Setzen Sie die Funktion wieder in die Formel für diese Spalte ein.
  6. Speichern Sie noch einmal.

Wenn Sie dies in SSMS auf diese Weise tun, bleibt die Reihenfolge der Spalten in Ihrer Tabelle erhalten, was durch ein einfaches drop...add übernimmt keine Garantie. Dies kann für manche wichtig sein.

3
Tim Lehner