Merci Harpo pour votre réponse. J'ai utilisé cette idée pour créer l'instruction SQL suivante. Nous avons beaucoup de tables 50+ qui ont toutes le même type de données (identifiant employé) mais ce nom de champ peut être différent. Ainsi, en fonction du nom de la table, le champ à mettre à jour sera différent. Mes instructions WHERE et SET sont plus compliquées que cet exemple, mais ce n'est pas important pour ce problème.
Je crée d'abord une table temporaire pour stocker la table/champs que je veux mettre à jour. Je boucle ensuite sur ces enregistrements et génère le code SQL. Pour ceux d'entre vous qui n'aiment pas, SQL dynamique, vous pouvez simplement utiliser une instruction print, puis copier le coller dans une autre fenêtre de requête et l'exécuter. Ou vous pouvez appeler la déclaration EXEC. Je voudrais accepter vos réponses, mais je n'ai pas répondu à ma question, en partie parce que je ne me suis pas expliqué complètement. De toute façon, merci pour votre aide.
DECLARE @TableFieldDictionary TABLE
(
tablename VARCHAR(100),
fieldname varchar(100)
)
insert into @TableFieldDictionary(tablename,fieldname) values ('table1','field1');
insert into @TableFieldDictionary(tablename,fieldname) values ('table2','field2');
--put more insert statements here. In my case, I have 50 inserts
declare cursor_dictionary cursor
for select tablename, fieldname from @TableFieldDictionary
open cursor_dictionary
declare @looptablename VARCHAR(100)
declare @loopfieldname varchar(100)
fetch next from cursor_dictionary
into @looptablename,@loopfieldname
DECLARE @UpdateSql AS varchar(max)
WHILE @@FETCH_STATUS = 0
BEGIN
SET @UpdateSql = 'UPDATE ' + @looptablename +
' SET ' + @loopfieldname + ' = 123' +
' WHERE ' + @loopfieldname + ' = 456'
print @updatesql
--EXEC(@updatesql)
fetch next from cursor_dictionary
into @looptablename,@loopfieldname
END
CLOSE cursor_dictionary
DEALLOCATE cursor_dictionary
* rire * Il semble que la course soit au marteau (dactylos). – MarkusQ