【问题标题】:Incorrect syntax near '<''<' 附近的语法不正确
【发布时间】:2017-01-11 00:31:39
【问题描述】:

我的任务是让一些在 SQL Server 2012 上正常运行的代码也可以在 SQL Server 2008 R2 上运行。我收到了这个错误:

附加信息:' 附近的语法不正确

当我尝试运行我的代码时,我发现我的这行 SQL 代码有问题

ALTER TABLE [dbo].[WorkTimeEntries] 
  ADD [TimeFinishedForRuntime] AS ISNULL([TimeFinished],
        IIF ([TimeStarted] < SYSUTCDATETIME(), [dbo].[udf_GetCurrentDateTimeOffsetInTimeZone](DATENAME(TZOFFSET, [TimeStarted])), [TimeStarted]));

我已经读到,在这种情况下,当人们尝试获取日期时发生了某种错误,但我不确定我的情况出了什么问题。

【问题讨论】:

  • 您在哪个 SQL 版本上运行它 - 2008 或 2012? IIF() 直到 2012 年才引入。
  • 我编辑我的帖子,我的英语不好抱歉。它在 SQL 2012 上运行良好,在 SQL 2008 R2 上无法运行。
  • 别担心,Shnugo 已经回答你了!

标签: sql-server tsql sql-server-2012 sql-server-2008-r2 iif


【解决方案1】:

基本上,如果您的 SQL 代码中有任何语法错误,就会发生此错误。请重新验证您的所有语句顺序。

【讨论】:

    【解决方案2】:

    SQL Server 2008R2 中没有 IIF

    将其替换为CASE

    ALTER TABLE [dbo].[WorkTimeEntries] ADD [TimeFinishedForRuntime] AS ISNULL(
        [TimeFinished],
        CASE WHEN [TimeStarted] < SYSUTCDATETIME() THEN [dbo].[udf_GetCurrentDateTimeOffsetInTimeZone](DATENAME(TZOFFSET, [TimeStarted])) ELSE [TimeStarted] END);
    

    【讨论】:

    • 哦,谢谢它有效,但现在我又遇到了一个错误,我认为这不是最后一个错误。 BEGIN; THROW 50003, 'Inconsistent employee ids have been provided for TimeRegisteredEmployees', 1; END;
    • @Stefan,这里也一样...THROW 是在 SQL Server 2012 中引入的。在使用 RAISERROR 之前。查找details and a comparison here
    • 在您的帮助下,我纠正了所有错误,但我在工作结束时得到了这个错误>“ROWS”附近的语法不正确。 Whick 发生在这一行 ~ISNULL(SUM(aed.[ActualMultiple]) OVER (PARTITION BY [WorkItemId] ORDER BY [TimeFinishedForRuntime] ROWS UNBOUNDED PRECEDING), 0) AS [GrossMultiple] FROM [dbo].[BasicAggregatedWorkTimeEntriesView] wte LEFT OUTER JOIN [AggregatedEmployeeData] aed ON wte.[Id] = aed.[WorkTimeEntryId];~ 我发现这些 ROWS 来自 SQL SERVER 2012,但我不知道如何在我的情况下替换它。
    • @Stefan,你遇到麻烦了...SUM(...) OVER() 用于计算累积和。这个功能也是相当新的......您可能会使用类似TimeFinishedForRuntime + (SELECT SUM(x.TimeFinishedForRuntime FROM dbo.WorkTimeEntries AS x WHERE xTimeStarted&gt;TimeStarted)) 的东西这样做,您将为每一行获得所有旧行的总和添加到实际值。但这是盲目的猜测......
    • 我们必须按实际倍数求和,我认为我们需要与 WHERE 内的 WorkItemId 相关。
    猜你喜欢
    • 2015-12-12
    • 2013-12-16
    • 1970-01-01
    • 2018-08-14
    • 2011-03-11
    • 2014-02-16
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多