SQL Server SELECT @VARIABLE = TOP 1

7
我正在尝试在存储过程中执行以下操作。
DECLARE @TICKET_AGE INT
SELECT @TICKET_AGE = TOP 1 (DATEDIFF(second, DATE_ENTERED, GETDATE())/60) AS TICKET_AGE
FROM TICKETS

但是它报错了,显示“INCORRECT SYNTAX NEAR 'TOP'”,我哪里做错了?

所以我更新了我的代码,现在看起来像下面这样...但现在出现了“Incorrect syntax near the keyword 'AS'.”的错误。

    -- DECLARE VARIABLE
    DECLARE @TICKET_AGE INT

    -- PULL THE DATA
    SELECT TOP 1 @TICKET_AGE = (DATEDIFF(second, DATE_ENTERED, GETDATE())/60) AS TICKET_AGE
    FROM TICKETS
    WHERE LOWER(STATUS_DESCRIPTION) LIKE '%new%'
    ORDER BY DATE_ENTERED ASC

TOP 1 必须在 SELECT 后面作为第一件事情,就像这样:SELET TOP 1 @TICKET_AGE = ... - Giacomo Degli Esposti
1
你正在将它赋值给一个变量。你不能取别名。 - Donnie
3个回答

15

TOP 1出现在变量之前。

SELECT TOP 1 @TICKET_AGE = DATEDIFF(second, DATE_ENTERED, GETDATE()) / 60
FROM TICKETS

2
记得重要的是要说出你改变了什么。 - T.J. Crowder
@juergen d 谢谢,那个错误已经解决了,但现在我遇到了“关键字 'As' 附近的无效语法”错误。有什么想法吗?我更新了我的代码,现在展示了完整版本。 - Phil
从我的答案中删除 AS TICKET_AGE - juergen d
@juergend 工作得非常完美!谢谢!一旦它让我,我会接受它作为正确的。 - Phil

0

不确定是否有影响,但这应该会给您相同的结果,并且可能表现更好

SELECT  @TICKET_AGE = MAX(DATEDIFF(second,DATE_ENTERED,GETDATE()) / 60)
FROM    TICKETS
WHERE   LOWER(STATUS_DESCRIPTION) LIKE '%new%'

-1

如果你想在TOP语句中使用实际变量(即检索前@TICKET_AGE行),那么你可以使用以下代码:

SELECT TOP @TICKET_AGE DATEDIFF(second, DATE_ENTERED, GETDATE()) / 60
  FROM TICKETS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接