Je me demande pourquoi je ne peux pas utiliser le nom de colonne de la variable comme:Nom des colonnes de variable SQL Server?
declare @a as varchar;
set @a='TEST'
select @a from x;
Merci
Je me demande pourquoi je ne peux pas utiliser le nom de colonne de la variable comme:Nom des colonnes de variable SQL Server?
declare @a as varchar;
set @a='TEST'
select @a from x;
Merci
Vous ne pouvez pas le faire parce que SQL est compilé avant de savoir ce que la valeur de @a est (je suppose en réalité vous voulez @a être un peu paramètre et pas dur codé comme dans votre exemple).
Au lieu de cela, vous pouvez le faire:
declare @a as varchar;
set @a='TEST'
declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'
exec sp_executesql @sql
Mais attention, ceci est une vulnérabilité de sécurité (attaques par injection SQL) ne devrait donc pas être fait si vous ne pouvez pas faire confiance ou bien @a propre.
Parce que les noms de colonnes sont résolues au moment de la compilation pas au moment de l'exécution de l'instruction SQL.
utilisation sp_executesql
pour cette
Example
SET @SQLString = N'SELECT *
FROM table1
WHERE timet = @time and items in (@item)';
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
SET @ParmDefinition = N'@time timestamp,
@item varchar(max) ';
EXECUTE sp_executesql
@SQLString
,@ParmDefinition
,@time = '2010-04-26 17:15:05.667'
,@item = '''Item1'',''Item2'',''Item3'',''Item4'''
;
Parce que ce n'est pas autorisé.
Insted de cela, vous pouvez utiliser la requête SQL dynamique:
declare @a as varchar;
set @a='TEST'
exec ('select ' + @a + ' from x')
La question était pourquoi ce n'est pas permis, pas comment le contourner. Je ne peux pas voir que répondre avec "Parce que ce n'est pas permis" est très utile. –
@David M: oui, c'est une solution de contournement seulement. Votre réponse est utile – Alex
Merci pour 'exec' - il est plus facile de se souvenir que' exec sp_executesql' bla bla. Je me souviens toujours d'avoir des erreurs avec ce SP, comme "pas autorisé à exécuter cette procédure". –
Et ne pas utiliser SQL dynamique sauf si vous lisez cette première: http://www.sommarskog.se/dynamic_sql.html – HLGEM