name - Nombre de las columnas de la variable SQL Server?
sql server collation names (4)
Debido a que los nombres de las columnas se resuelven en tiempo de compilación, no en tiempo de ejecución para la instrucción SQL.
Me pregunto por qué no puedo usar un nombre de columna variable como ese:
declare @a as varchar;
set @a=''TEST''
select @a from x;
Gracias
No puede hacerlo porque SQL está compilado antes de saber cuál es el valor de @a (supongo que en realidad usted querría que @a sea un parámetro y no un código duro como en su ejemplo).
En su lugar puedes hacer esto:
declare @a as varchar;
set @a=''TEST''
declare @sql nvarchar(max)
set @sql = ''select ['' + replace(@a, '''''''', '''''''''''') + ''] from x''
exec sp_executesql @sql
Pero tenga cuidado, esta es una vulnerabilidad de seguridad (ataques de inyección de SQL), por lo que no debe hacerse si no puede confiar o limpiar bien @a.
Porque no está permitido.
Instado de esto usted podría usar la consulta dinámica de SQL:
declare @a as varchar;
set @a=''TEST''
exec (''select '' + @a + '' from x'')
usa sp_executesql
para esto
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''''''
;