2017-04-24 74 views
0

我有一個查詢,像這樣:SQL附近有語法錯誤的分配輸出到可變

SELECT id, @RowNumber = ROW_NUMBER() OVER (ORDER BY id) as 'number' 
FROM WaitList 
WHERE email = @Email 

但是我得到錯誤:

Incorrect syntax near the keyword 'as'. 

我所試圖做的是分配ROW_NUMBER( )到一個變量。

我真的需要從WaitList表中獲取行號。

我可以把結果放在變量表中,然後通過選擇'number'來獲得行號嗎?

+2

什麼是你的rdbms? –

+0

我甚至不知道那是什麼 – user979331

+0

RDBMS =關係數據庫管理系統。那麼你使用哪一個?代碼看起來像T-SQL,因此它可能是Microsoft SQL Server? –

回答

1

如果你想有匹配的電子郵件地址的行數,但該表實際上並沒有行號,那麼你應該創建一個CTE分配行號,然後從......像這樣選擇特定行:

WITH NumberedRows AS (
    SELECT [id], [email], ROW_NUMBER() OVER (ORDER BY id) as [Number] 
    FROM WaitList 
) 
SELECT @RowNumber = Number 
FROM NumberedRows 
WHERE email = @Email 

需要注意的是,如果有在此之前的SELECT語句,你需要請確保您用分號終止SELECT語句(或其他SQL語句)。或者,如果你願意的話,你可以在分號前加上WITH,如「; WITH ...」

+0

我得到這個錯誤'不正確的語法附近的關鍵字'與」。如果此語句是公用表表達式,xmlnamespaces子句或變更跟蹤上下文子句,則必須以分號結尾以前的語句。「 – user979331

+1

錯誤消息說明了它的含義。按照概述執行JUST這個語句,或者在這個語句之前放置一個GO,如果它可以單獨在一個批處理中的話;或者如果它是大批量的SQL的一部分,那麼簡單地用分號終止前面的語句。例如,「DECLARE @RowNumber int; WITH NumberedRows AS(...」 – pmbAustin

+0

我已經更新了答案,以明確分號問題。「WITH」是一個在SQL Server上的所有T-SQL上使用的關鍵字,所以有時候可能會模棱兩可。 – pmbAustin

-1
SELECT id, ROW_NUMBER() OVER (ORDER BY id) as number 
FROM WaitList 
WHERE email = @Email; 
1

您的代碼看起來像SQL Server。您不能分配一個變量返回結果與相同的查詢設置:

SELECT id, ROW_NUMBER() OVER (ORDER BY id) as number 
FROM WaitList 
WHERE email = @Email; 

分配值的變量並沒有真正意義。如果你想,也就是說,匹配行的總數,然後使用聚合函數:

select @cnt = count(*) 
from waitlist 
where email = @email; 
+0

我真的需要得到的項目的實際行號 – user979331

0
select a.id , a.number 
from 
(SELECT id, ROW_NUMBER() OVER (ORDER BY id) as number 
FROM WaitList 
WHERE email = @Email) a