SSMS 在视图设计器中自动更正日期部分
Posted
技术标签:
【中文标题】SSMS 在视图设计器中自动更正日期部分【英文标题】:SSMS auto correcting datepart in view designer 【发布时间】:2018-04-13 15:15:22 【问题描述】:我遇到过超级烦人的边缘案例。
在一个视图中,我有一个表,它有一个名为“Year”的列,它是一个整数。 在这个视图中,我试图过滤与去年相关的内容,所以我使用以下 sn-p。
WHERE Jobs.Year > YEAR(DATEADD(year, -1, GETDATE()))
但是 ssms,尽管它是无限的智慧,却认为它很有帮助,并将 datepart year 替换为 Year 列。
WHERE dbo.Jobs.Year > YEAR(DATEADD(dbo.Jobs.Year, - 1, GETDATE()))
有没有办法逃避这种行为?
编辑: 这是 SSMS 2014 上的问题,似乎此问题在某些更高版本中不存在。
【问题讨论】:
Year 是 SQL 关键字,对于你的 where 试试这个 WHERE Jobs.[Year] = YEAR(DATEADD(year, -1, GETDATE())) 通常在关键字和保留字之后命名列是不好的做法。因此(并且根本不试图粗鲁),问题在于使用关键字的列;因此,由于冲突,智能感知因此使用您的列而不是关键字。就个人而言,如果可以的话,我会尝试将您的列名更改为不使用关键字和保留字。 是的,我 100% 同意使用保留字是这里的真正问题,不幸的是不是我的手艺。无法更改。 @Brad 转义列 dosnt 做任何事情,它是 DATEADD 中的日期部分,需要以某种方式转义。 [年份] 也不起作用。 您使用的是什么版本的 SSMS?我可以在设计器的过滤器列中输入> YEAR(DATEADD(Year, - 1, GETDATE()))
,而不会自动将其转换为表列名称。我正在使用 SSMS 2017 (v17.6)
您可以使用 yy 代替单词 year:SELECT YEAR(DATEADD(yy, -1, GETDATE()))
【参考方案1】:
从我的评论移到这里。
您的日期部分中的“YEAR”一词有问题,因为它是保留字。您可以更改以获得与以下相同的结果:
SELECT YEAR(DATEADD(YEAR, -1, GETDATE()))
到:
SELECT YEAR(DATEADD(yy, -1, GETDATE()))
这里是所有有效日期部分的列表供参考: https://www.w3schools.com/sql/func_sqlserver_datepart.asp
【讨论】:
以上是关于SSMS 在视图设计器中自动更正日期部分的主要内容,如果未能解决你的问题,请参考以下文章