Comment puis-je modifier cette colonne calculée dans SQL Server 2008?
-
24-09-2019 - |
Question
I 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 cela ne fonctionne pas. Je suis en train d'entrer une autre condition à la déclaration de cas, mais il ne fonctionne pas.
Merci beaucoup!
La solution
Si vous essayez de changer une colonne existante, vous ne pouvez pas utiliser ADD. Au lieu de cela, essayez ceci:
modifier tbPedidos de table
modifier restricoes de colonne que
(Coulée (cas lorsque restricaoLicenca = 1 ou restricaoLote = 1 ou restricaoValor = 1
puis une autre extrémité en tant que bit 0))
EDIT: Ce qui précède est incorrect . Lors de la modification d'un calculé colonne la seule chose que vous peut faire est de laisser tomber et ajouter de nouveau.
Autres conseils
Ceci est l'une de ces situations où il peut être plus facile et plus rapide à utiliser simplement la fonction de schéma de SQL Server Management studio.
- Créer un nouveau diagramme, ajoutez votre table, et choisir d'afficher la colonne de formule dans la vue de la table du diagramme.
- Modifier les colonnes à une formule
('')
chaîne vide ou quelque chose d'aussi anodin (probablement de telle sorte que vous ne changez pas le type de données de la colonne). - Enregistrer le diagramme (qui devrait enregistrer le tableau).
- Modifier votre fonction.
- Mettez la fonction de retour dans la formule pour cette colonne.
- Enregistrer une nouvelle fois.
Faire de cette façon SSMS conservera l'ordre des colonnes dans votre table, qui d'un simple drop...add
ne garantit pas. Cela peut être important pour certains.
Comme Michael Todd affirme à juste titre 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 à nouveau.
Je viens juste de faire moi-même, même si je voulais conserver les données existantes (tout comme Management Studio lorsque vous effectuez cette tâche par le concepteur).
Ma solution était de stocker les données dans une table temporaire puis mettez à jour la table avec les valeurs enregistrées après que je l'avais abandonné et recréée 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