Sql-Server

在 SET 語句中使用括號

  • March 8, 2020

我正在嘗試計算不同對的數量sender_idsend_to_id並將其分配給一個變數@UniqueRequests。當我嘗試下面的語句時,我收到一條錯誤消息,指出附近的語法)不正確。

DECLARE @UniqueRequests int;
SET @UniqueRequests = (SELECT COUNT(*) FROM (SELECT DISTINCT sender_id, send_to_id FROM friend_request));

所以我的問題是

  1. 正確的說法是什麼?
  2. 似乎我們必須SELECT在分配變數時在 a 周圍使用括號。也就是說,我們需要寫SET @MyVariable = (SELECT some_expression);Why is that?
  3. 一般是否有關於在 SQL Server 中使用括號的文件頁面?

感謝您的幫助!

實際上這個錯誤有點令人困惑,這就是你問這些問題的原因。

正確的說法是:

DECLARE @UniqueRequests int;
SET @UniqueRequests = (SELECT COUNT(*) FROM (SELECT DISTINCT sender_id, send_to_id FROM friend_request) friends);

我在其他一些具有相同概念的表上進行了測試,您可能會看到如下結果:

選擇不同

這些問題的答案如下:

  1. 正確的說法是什麼?
DECLARE @UniqueRequests int;
SET @UniqueRequests = (SELECT COUNT(*) FROM (SELECT DISTINCT sender_id, send_to_id FROM friend_request) friends);
  1. 似乎我們必須在分配變數時在 SELECT 周圍使用括號。也就是說,我們需要寫 SET @MyVariable = (SELECT some_expression); 為什麼呢?

這是因為您正在設置值,並且您不能將關鍵字和其他字元串分配給 int,而是您想要分配該值,這意味著查詢必須首先執行,並且您希望將結果分配給這個特定的整數變數。

或者,如果您只想設置該值,您可以使用以下方法:

DECLARE @UniqueRequests int;
select @UniqueRequests = COUNT(*) FROM CommandLog
print @UniqueRequests
  1. 一般是否有關於在 SQL Server 中使用括號的文件頁面?

您可以從Microsoft、此執行緒和此連結中參考此內容。

希望這可以幫助。

引用自:https://dba.stackexchange.com/questions/261464