我正在尝试使网站上的TSQL select语句自动化。每年列名称都会更改,名称末尾的数字值会增加1,因此,我试图手动在where子句中包含动态列名称,而不是手动更新站点。
数据看起来像这样。
+------+------+------+------+------+ | FY18 | FY19 | FY20 | FY21 | FY22 | +------+------+------+------+------+ | 1 | 0 | 1 | 0 | 1 | | 1 | 1 | 0 | 1 | 0 | | 1 | 0 | 0 | 1 | 0 | +------+------+------+------+------+
到目前为止,这是我要提出的... select语句看起来像这样
Select distinct POS from TBL_Staff where [' 'FY'+right(year(dateadd(month,3,getdate()))-1,2) '] = 1
我要弄清楚的是,是否有一种方法可以动态生成日期并使SQl将名称+日期识别为列
注意:这是伪造的数据,如果有不清楚的地方,请告诉我
对此表示任何帮助。
答案 0 :(得分:0)
您可以使用动态SQL
DECLARE @sql NVARCHAR(MAX) = 'Select distinct
POS
from TBL_Staff
where FY' + CAST(right(year(dateadd(month,3,getdate()))-1,2) AS VARCHAR) + ' = 1'
exec sp_executesql @sql
@sql是用于动态构造SQL语句的变量。然后,sp_executesql过程执行它。当存在其他替代方法时,请注意不要使用动态sql。如果从用户那里获取输入信息并且您不小心清理输入参数,那么它很难阅读,难以维护并且可能是安全问题。