Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Usando SQL dinâmico para especificar um nome de coluna adicionando uma variável à consulta sql simples


Se você estiver tentando especificar o nome da coluna dinamicamente, poderá dar uma olhada na execução do sql dinâmico. No entanto, você deve ler primeiro sobre os perigos dessa abordagem:

http://www.sommarskog.se/dynamic_sql.html

Nessa página, há uma amostra que mostra a especificação dinâmica do nome da tabela -- você pode alterá-la para que ela especifique dinamicamente o nome da coluna:
CREATE PROCEDURE general_select @tblname nvarchar(128),
                                @key     varchar(10),
                                @debug   bit = 0 AS
DECLARE @sql nvarchar(4000)
SET @sql = 'SELECT col1, col2, col3
            FROM dbo.' + quotename(@tblname) + '
            WHERE keycol = @key'
IF @debug = 1 PRINT @sql
EXEC sp_executesql @sql, N'@key varchar(10)', @key = @key

Então, por exemplo, se você tivesse uma tabela 'MinhaTabela' com colunas chamadas 'x', 'y' e 'z', poderia ser assim:
DECLARE @columnName nvarchar(128)
DECLARE @sql nvarchar(4000)
set @columnName = 'z'

SET @sql = 'SELECT x, y, ' + @columnName + ' from MyTable'
EXEC sp_executesql @sql, N'@columnName varchar(128)', @columnName = @columnName