我需要动态填充选择列表,你能建议任何解决方案吗?
示例:
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运行查询时,我将在另一个选项中发表评论。
或者您还有其他解决方法吗?
答案 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)