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

j'ai une colonne calculée créé 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 fonctionne pas. J'essaie d'entrer une autre condition dans la déclaration de l'affaire, mais ça ne marche pas.

Merci beaucoup!

43
demandé sur Leniel Maccaferri 2010-03-03 18:44:47

4 réponses

si vous essayez de changer une colonne existante, vous ne pouvez pas utiliser ADD. Au lieu de cela, essayez ceci:

alter table tbPedidos alter column restricoes comme (cast (cast lorsque restricaoLicenca = 1 ou restricaoLote = 1 ou restricaoValor = 1 puis 1 Autre 0 fin en bit))

EDIT: ci-dessus est incorrecte. Lors de la modification d'un calculées colonne la seule chose que vous faire est de laisser tomber et de l'ajouter de nouveau.

58
répondu Michael Todd 2010-03-04 00:26:16

quelque Chose comme ceci:

ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn

ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn + 10

Source

58
répondu Leniel Maccaferri 2012-10-01 19:52:08

C'est l'une de ces situations où il peut être plus facile et plus rapide de simplement utiliser le schéma fonctionnalité de SQL Server Management Studio.

  1. créer un nouveau diagramme, ajouter votre table, et choisir d'afficher la colonne formula dans la vue de la table du diagramme.
  2. Modifier les colonnes de la formule à une chaîne vide ('') ou quelque chose de tout aussi inoffensif (probablement tel que vous ne changiez pas le type de données de la colonne).
  3. Enregistrer le diagramme (qui devrait enregistrez la table).
  4. Modifier votre fonction.
  5. replacez la fonction dans la formule de cette colonne.
  6. Enregistrer de nouveau.

le faire de cette façon dans SSMS va conserver l'ordre des colonnes dans votre tableau, ce qui un simple drop...add ne sera pas garantie. Cela peut être important pour certains.

2
répondu Tim Lehner 2016-03-24 19:51:30

comme le dit correctement Michael Todd dans sa réponse

Lors de la modification d'une colonne calculée la seule chose que vous pouvez faire est de laisser tomber et ajouter de nouveau.

J'ai juste eu à le faire moi-même, bien que je voulais préserver les données existantes (comme le fait Management Studio quand vous exécutez cette tâche à travers le designer).

ma solution était de stocker les données dans une table temporaire puis de mettre à jour la table avec les valeurs stockées après que je supprimé et recréé la colonne calculée.

SELECT IDKey, Value
INTO #Temp
FROM MyTable

ALTER TABLE MyTable
DROP COLUMN Value

ALTER TABLE MyTable
ADD Value nvarchar(max) NULL

UPDATE MyTable
SET Value = #Temp.Value
FROM
MyTable
INNER JOIN #Temp ON #Temp.IDKey= MyTable.IDkey
-2
répondu Amicable 2017-05-23 12:10:27