Je dois ajouter une colonne supplémentaire à une table existante, puis insérer les valeurs de colonnes appropriées pour les enregistrements existants. Je dois le faire dans une seule procédure stockée.Modifier la valeur de la colonne directement après la création (au sein d'une seule procédure stockée)
Jusqu'à présent, je donne les résultats suivants (studio de gestion SQL signale qu'il ne peut pas trouver la nouvelle colonne afin d'ajouter les valeurs aux enregistrements existants):
BEGIN
ALTER TABLE tbl1
ADD col_add int
UPDATE tbl1
SET [col_add]='value'
WHERE col_pk = 1
END
J'ai essayé d'ajouter un mot-clé « GO » entre les instructions ALTER et UPDATE, mais il signale ensuite une erreur de syntaxe.
Merci d'avance.
C'est à mi-chemin, mais vous devez commencer vos transactions avec 'BEGIN TRAN' avant de pouvoir engager – GarethD
Est-ce vraiment nécessaire si vous faites un commit après l'autre? Peut-être que si vous faites 'alter', 'update' et ensuite commit, vous devez ajouter une transaction, mais je ne pense pas que si vous faites 'alter' 'commit' 'update' 'commit', vous avez besoin de transaction. peut-être que je me trompe mais ... –
Oui c'est nécessaire, testez-le. La procédure se compilera sans 'BEGIN TRAN', mais produira une erreur lors de l'exécution. Il y a un script de test [ici] (http://sqlfiddle.com/#!3/0ed4a/1), qui ne fonctionnera pas à cause des permissions sur SQL Fiddle, mais vous pouvez l'essayer sur votre DB. Si vous décommentez les lignes 'BEGIN TRAN', vous verrez la procédure s'exécuter sans erreur (si elle est exécutée une fois). – GarethD