2011-06-21 2 views
1

Je veux réaliser la fonctionnalité comme ceci comment puis-je faire ceci.Nom de la colonne en tant que variable dans la sélection

DECLARE @filterByDate VARCHAR(20) 

IF(@filterByDate = 'expectedDate') 
    SET @filterByDate = 'ExpectedStartDate' 
ELSE 
    SET @filterByDate = 'ActualStartDate' 

SELECT @filterByDate AS Date 
FROM TableName 

Merci.

Répondre

1
DECLARE @filterByDate VARCHAR(20) 

IF(@filterByDate = 'expectedDate') 
    SET @filterByDate = 'ExpectedStartDate' 
ELSE 
    SET @filterByDate = 'ActualStartDate' 

Declare @Sql varchar(max) 

SET @SQL = 'SELECT @Filter AS DATE FROM TableName' 
DECLARE @ParmDefinition nVARCHAR(20) 
SET @ParmDefinition = N'@filter nvarchar(20)' 
exec sp_executesql @SQL, @ParmDefinition, @Filter = @filterByDate 
+0

grâce cela a été utile ** DECLARE @filterByDate VARCHAR (20) SET @filterByDate = 'ExpectedStartDate' Déclare @Sql varchar (max) SET @SQL = 'SELECT' + @filterByDate + 'AS DATE, insertDate la feuille de travail' EXEC (@SQL) ** – Sami

+0

IF @filterByDate ne désinfecté, vous avez un risque d'injection SQL – gbn

+0

pas d'injection ici - seulement paramete r passé dans sp_executesql est déclaré et placé dans l'usp. Aucun avantage à passer en paramètre non plus. – BonyT

3

standard SQL, fonctionne sur la plupart des SGBDR

SELECT CASE @filterByDate 
     WHEN 'ExpectedStartDate' THEN ExpectedStartDate 
     WHEN 'ActualStartDate' THEN ActualStartDate 
     ELSE NULL 
     END as mydate 
     --optional , @filterByDate AS ColumnName 
FROM 
    MyTable 
Questions connexes