2011-06-21 60 views
1

我想获得像这样的功能我该如何做到这一点。列名作为变量在选择

DECLARE @filterByDate VARCHAR(20) 

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

SELECT @filterByDate AS Date 
FROM TableName 

谢谢。

回答

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

感谢,这是有益的** DECLARE @filterByDate VARCHAR(20) SET @filterByDate = 'ExpectedStartDate' 声明@sql VARCHAR(最大值) SET @SQL = 'SELECT' + @filterByDate + '日期,insertDate从工作表' EXEC(@SQL)** – Sami

+0

IF @filterByDate没有被清除掉,你有一个SQL注入风险 – gbn

+0

没有注射在这里 - 只有paramete r传入sp_executesql是在usp中声明并设置的。作为参数传入也没有好处。 – BonyT

3

SQL标准,适用于大多数RDBMS

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