Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 列名作为select中的变量_Sql Server 2005 - Fatal编程技术网

Sql server 2005 列名作为select中的变量

Sql server 2005 列名作为select中的变量,sql-server-2005,Sql Server 2005,我想实现这样的功能,我如何才能做到这一点 DECLARE @filterByDate VARCHAR(20) IF(@filterByDate = 'expectedDate') SET @filterByDate = 'ExpectedStartDate' ELSE SET @filterByDate = 'ActualStartDate' SELECT @filterByDate AS Date FROM TableName 谢谢。SQL标准,适用于大多数RDBMS DE

我想实现这样的功能,我如何才能做到这一点

DECLARE @filterByDate VARCHAR(20)

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

SELECT @filterByDate AS Date
FROM TableName

谢谢。

SQL标准,适用于大多数RDBMS

 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
SELECT CASE @filterByDate
         WHEN 'ExpectedStartDate' THEN ExpectedStartDate
         WHEN 'ActualStartDate' THEN ActualStartDate
         ELSE NULL
       END as mydate
       --optional , @filterByDate AS ColumnName
FROM
   MyTable

感谢这是非常有用的声明@filterByDate VARCHAR(20)SET@filterByDate='ExpectedStartDate'声明@Sql VARCHAR(max)SET@Sql='选择'+@filterByDate+'作为日期,insertDate FROM sheet'EXEC(@Sql),如果@filterByDate未清理,您有一个SQL注入风险此处没有注入-只有传递到sp_executesql的参数在usp中声明和设置。作为参数传入也没有好处。但是是的-如果这不在usp内,那么我同意我必须在存储过程中将@filterByDate作为参数传入。我认为对于存储过程来说,不存在sql注入的风险。我说得对吗?