Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utilisation de SQL dynamique pour spécifier un nom de colonne en ajoutant une variable à une simple requête sql

Si vous essayez de spécifier dynamiquement le nom de la colonne, vous pouvez jeter un œil à l'exécution de sql dynamique. Cependant, vous devez vous assurer de lire d'abord les dangers de cette approche :

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

À partir de cette page, il existe un exemple qui montre la spécification dynamique du nom de la table -- vous pouvez le modifier afin qu'il spécifie dynamiquement le nom de la colonne à la place :

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

Ainsi, par exemple, si vous aviez une table 'MyTable' avec des colonnes nommées 'x', 'y' et 'z', cela pourrait ressembler à :

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