Référencement dynamic des colonnes SQL Server dans SP

SQL 2008

Bonjour,

J'ai une tâche assez différente que je dois faire en SQL. C'est un peu plus complexe que ça, mais je vais essayer de simplifier.

Je dois en quelque sorte sélectionner une colonne dynamicment. Comme ça:

declare @ColName varchar(50) select @ColName = 'Column1' --This is an actual column name in a real table called 'MyTable' select @ColName from MyTable where Column2 = 123 

Y a-t-il un moyen de faire quelque chose comme ça? Toute aide ou direction serait grandement appréciée!

Merci, Jason

Lisez le lien dans la réponse @SQLMenace!

 declare @ColName varchar(50) select @ColName = 'Column1' declare @sql varchar(MAX) select @sql = 'select ' + @ColName + ' MyTable where Column2 = 123' exec (@sql) 

vous avez besoin de SQL dynamic, mais lisez d'abord La malédiction et les bénédictions du SQL dynamic pour vous assurer de ne pas vous ouvrir à SQL Injection

 DECLARE @colNameIn AS varchar(50) = 'Column1' DECLARE @template AS varchar(MAX) = 'select {@ColName} from MyTable where Column2 = 123' -- This template can be expanded -- Protect yourself from injection or invalid columns: DECLARE @ColName AS varchar(50) SELECT @ColName = COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyTable' AND COLUMN_NAME = @ColNameIn IF @ColName IS NOT NULL BEGIN DECLARE @sql AS varchar(MAX) SET @sql = REPLACE(@template, '{@ColName}', QUOTENAME(@ColName)) EXEC (@sql) END 

Vous pouvez le faire en utilisant une instruction CASE si vous avez prédéfini tous les noms de colonnes acceptables dans la procédure.

 DECLARE @ColName varchar(50) SET @ColName = 'Column1' SELECT CASE @ColName WHEN 'Column1' THEN Column1 WHEN 'Column2' THEN Column2 END FROM MyTable WHERE Column2 = 123