web-dev-qa-db-fra.com

Comment puis-je modifier cette colonne calculée dans SQL Server 2008?

J'ai une colonne calculée créée avec la ligne suivante:

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

Mais, maintenant, je dois changer cette colonne pour quelque chose comme:

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))

Mais ça ne marche pas. J'essaie de saisir une autre condition dans la déclaration de cas, mais cela ne fonctionne pas.

Merci beaucoup!

52
AndreMiranda

Si vous essayez de modifier une colonne existante, vous ne pouvez pas utiliser ADD. Essayez plutôt ceci:

alter table tbPedidos alter colonne restricoes as (cast (cas lorsque restricaoLicenca = 1 ou restricaoLote = 1 ou restricaoValor = 1 puis 1 else 0 fin comme bit))

EDIT: Ce qui précède est incorrect. Lorsque vous modifiez une colonne calculée, la seule chose que vous pouvez faire est de la supprimer et de la rajouter.

66
Michael Todd

Quelque chose comme ça:

ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn

ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn + 10

Source

67

Il s'agit de l'une de ces situations où il peut être plus facile et plus rapide d'utiliser simplement la fonctionnalité diagramme de SQL Server Management Studio.

  1. Créez un nouveau diagramme, ajoutez votre table et choisissez d'afficher la colonne de formule dans la vue de table du diagramme.
  2. Remplacez la formule des colonnes par une chaîne vide ('') ou quelque chose de tout aussi inoffensif (probablement tel que vous ne modifiez pas le type de données de la colonne).
  3. Enregistrez le diagramme (qui devrait enregistrer le tableau).
  4. Modifiez votre fonction.
  5. Remettez la fonction dans la formule de cette colonne.
  6. Enregistrez à nouveau.

En procédant de cette manière dans SSMS, vous conserverez l'ordre des colonnes de votre table, ce qu'un simple drop...add ne garantit pas. Cela peut être important pour certains.

3
Tim Lehner