ver name information_schema from ejemplos columns sql-server tsql

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'''''' ;