我支持一个老旧的ASP.net系统,该系统必须在众多客户的旧版SQL Server上运行(回到2005年)。
有没有办法使用更高版本的SQL Server功能而不会遇到Incorrect syntax near....
错误?
我想在Azure SQL 12上使用的当前功能是AT DATE TIME
,例如select CONVERT(datetime, SYSDATETIMEOFFSET() AT TIME ZONE 'GMT Standard Time')
实现自定义GETDATE()
函数,但早期的Sql版本拒绝编译它。
是唯一一个在sql字符串上运行exec()
的选项,还是有更优雅的解决方案?
--do a version check, and then run the appropriate sql string?
if (CHARINDEX('Azure', @@VERSION,0) > 0)
exec('select CONVERT(datetime, SYSDATETIMEOFFSET() AT TIME ZONE ''GMT Standard Time'')')
else
select getDate()
答案 0 :(得分:2)
您的选择如下:
其中,#3是首选解决方案。
答案 1 :(得分:0)
这是解决代码问题的想法......
DECLARE @LocalOffset INT = -5
DECLARE @DaylightSavings INT = 0
DECLARE @OffSet INT = @LocalOffset + @DaylightSavings
SELECT DATEADD(HOUR,@OffSet,GETUTCDATE())
显然还有其他方法可以实现您的目标。我只是使用所有时区填充表格或视图,然后根据该时区是否进行处理您的夏令时。