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!
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.
quelque Chose comme ceci:
ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn
ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn + 10
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.
- créer un nouveau diagramme, ajouter votre table, et choisir d'afficher la colonne formula dans la vue de la table du diagramme.
- 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). - Enregistrer le diagramme (qui devrait enregistrez la table).
- Modifier votre fonction.
- replacez la fonction dans la formule de cette colonne.
- 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.
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