Si je veux utiliser une variable comme nom de la nouvelle colonne, est-ce que cela possible dans MS SQL?
Exemple qui ne fonctionne pas: P>
EXEC ('ALTER TABLE my_table ADD ' + @column + ' INT')
3 Réponses :
Ceci est possible à l'aide de Dynamic SQL pour créer votre DDL et à l'aide de la commande voir Cet article article. P> Je vais également ajouter que le moment où vous vous aventurez Au Terre de Dynamic SQL, vous devez prendre soin de ne pas vous exposer à Attaques d'injection SQL . Nettoyez toujours les paramètres à venir. P> Comme Philip mentionne - réfléchissez longtemps et difficile avant de le faire. Le fait qu'il soit possible ne fait pas une bonne chose ... p> Erland Sommarskog a écrit un vaste article sur l'utilisation dynamique SQL - la malédiction et les bénédictions de SQL dynamique que je recommande de lire complètement. p> p> exécutant code> pour exécuter la chaîne.
Assurez-vous également que la valeur de la variable est désinfectée pour les erreurs et l'injection SQL.
... Mais ce n'est pas une idée particulièrement bonne, comme vous pouviez vous retrouver avec des colonnes nommées des mots réservés (colonne "colonne") ou (frissonnant) contenant des espaces incorporés. Pensez long et dur avant de faire ça!
Je trouve souvent que l'utilisation d'Exec est le premier signe que je suis éteint dans les mauvaises herbes. Mais parfois c'est le meilleur des alternatives médiocres
Regardez ( Exécuter (transact-sql) )
CREATE TABLE MyTable( ID INT ) GO SELECT * FROM MyTable GO DECLARE @column VARCHAR(100) SET @column = 'MyNewCol' EXEC('ALTER TABLE MyTable ADD ' + @column + ' INT') GO SELECT * FROM MyTable GO DROP TABLE MyTable
alter procedure sp_check_table_column ( @field_name varchar(max), @data_type varchar(max), @mandatory varchar(max) ) as if not exists (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '<table_name>' and COLUMN_NAME = @field_name) begin declare @sql varchar(max) set @sql = ('ALTER TABLE <table_name> ADD ' + @field_name + ' ' + @data_type + ' ' + @mandatory) exec (@sql) end
Quelle est l'erreur sa donnée?
@MAHESH VELAGA: Le message d'erreur est hors de propos. C'est simplement une syntaxe incorrecte pour l'énoncé de table alter
Désinfecter votre variable (@column) avant de faire cela ... C'est très essentiel ou vous regretterez plus tard