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 在视图设计器中自动更正日期部分的主要内容,如果未能解决你的问题,请参考以下文章

如何在蚂蚁设计日期选择器中禁用所有星期日和特定日期数组

如何在 Visual Studio Xamarin.ios 设计器中添加同级视图?

@2x 图像不显示在 XCode4 界面构建器设计器中

如何在 Qt 设计器中使控件自动调整大小?

主属性不是在 aspx 设计器中自动生成导致运行时错误

BSERP WEBPOS小票设计器中控件如何设置自动换行。