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 ressortingcoes as (cast(case when ressortingcaoLicenca = 1 or ressortingcaoLote = 1 then 1 else 0 end as bit)) 

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

 alter table tbPedidos alter column ressortingcoes as (cast(case when ressortingcaoLicenca = 1 or ressortingcaoLote = 1 or ressortingcaoValor = 1 then 1 else 0 end as bit)) 

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

Merci beaucoup!

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

modifier la table tbPedidos modifier les ressortingcoes de colonne comme (cast (cas où ressortingcaoLicenca = 1 ou ressortingcaoLote = 1 ou ressortingcaoValor = 1 alors 1 sinon 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 déposer et de la rappend.

Quelque chose comme ça:

 ALTER TABLE dbo.MyTable DROP COLUMN OldComputedColumn ALTER TABLE dbo.MyTable ADD OldComputedColumn AS OtherColumn + 10 

La source

C’est l’une de ces situations où il peut être plus simple et plus rapide d’utiliser la fonctionnalité de 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 tableau du diagramme.
  2. Remplacez la formule des colonnes par une chaîne vide ('') ou quelque chose d’autre inoffensif (probablement tel que vous ne modifiez pas le type de données de la colonne).
  3. Enregistrez le diagramme (qui devrait enregistrer la table).
  4. Modifiez votre fonction.
  5. Remettez la fonction dans la formule pour cette colonne.
  6. Enregistrez encore une fois.

En procédant ainsi dans SSMS, vous conserverez l’ordre des colonnes de votre table, ce qu’une simple drop...add ne garantira pas. Cela peut être important pour certains.

Comme Michael Todd le dit correctement dans sa réponse

Lorsque vous modifiez une colonne calculée, la seule chose que vous pouvez faire est de la déposer et de la rappend.

Je devais le faire moi-même, même si je voulais conserver les données existantes (comme le fait Management Studio lorsque vous effectuez cette tâche via le concepteur).

Ma solution consistait à stocker les données dans une table temporaire, puis à mettre à jour la table avec les valeurs stockées après avoir 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