是否可以在SQL Server 2008中动态设置选择列表?

时间:2015-03-17 13:11:37

标签: sql-server-2008 select

我需要动态填充选择列表,你能建议任何解决方案吗?

示例:

DECLARE @DATE CHAR
SET @DATE='E.TERMINATION_DATE'
--SET @DATE='E.HIRE_DATE'
SELECT E.ID,E.FIRSTNAME,E.LASTNAME, @DATE FROM DBO.EMPLOYEES E

是否可以在select查询中设置列名? 对于某些查询,我需要设置变量@DATE as TERMINATION DATE,对于某些查询,我需要set @DATE as E.HIREDATE. 当我将基于TERMINATION_DATE运行查询时,我将在另一个选项中发表评论。 或者您还有其他解决方法吗?

3 个答案:

答案 0 :(得分:2)

您可以使用Dynamic sql。但是你应该阅读this blog来了解它。

DECLARE @DATE VARCHAR(100),
  @SQL VARCHAR(MAX)

IF YOURCONDITION
  BEGIN
   SET @DATE='E.TERMINATION_DATE'
  END
ELSE
  BEGIN
   SET @DATE='E.HIRE_DATE'
  END

SET @SQL = 'SELECT E.ID,E.FIRSTNAME,E.LASTNAME,' + @DATE +' FROM DBO.EMPLOYEES E'
exec sp_executesql @SQL

答案 1 :(得分:0)

您可以在select查询中使用变量,但您应该将该查询分配给某个变量并执行该变量

因为在SSMS中它首先会检查(运行时)然后执行。在我们的场景中,变量仅在执行时分配

所以我们需要将它分配给变量,因为@coderofcode告诉

DECLARE @DATE VARCHAR(100),
        @SQL VARCHAR(MAX)
 SET @DATE='E.TERMINATION_DATE'
 SET @SQL = 'SELECT E.ID,E.FIRSTNAME,E.LASTNAME,' + @DATE +' FROM    DBO.EMPLOYEES E'
 exec(@sql)

答案 2 :(得分:0)

我正在编写一个函数,我需要在某些情况下使用execution_date,而对于其他一些情况我需要使用hire_date。 所以我想我现在可以动态地填充这些东西,这对我来说是一个伟大的发明。非常感谢Giorgi,代码编码和koushik。 我在这里使用这个伪代码。

- 设置条件参数
    DECLARE @HIRE_DATE DATETIME,
    SET @ HIRE_DATE =从E.EMPLOYEES选择MIN(HIRE_DATE)WHERE E.PERSON_ID> 30000
- 基于条件动态设置变量      IF @HIRE_DATE是否为空     BEGIN
      SET @DATE =' E.TERMINATION_DATE'
    END
     ELSE
     BEGIN
       SET @DATE =' E.HIRE_DATE'
     结束

- 设置要执行的sql     SET @SQL =' SELECT COUNT(E.NR)AS ACTIVITIES,E.CLI_FIRSTNAME,E.CLI_LASTNAME,E.DEBTORNR,' + @DATE +'来自DBO.EMPLOYEES E
      GROUP BY E.CLI_FIRSTNAME,E.CLI_LASTNAME,E.DEBTORNR,' + @DATE
      exec(@sql)