Sql-Server

SQL中的雙數字元號##是什麼意思?

  • March 5, 2020

一篇元文章給出了一段很好的 SQL 片段

declare @search nvarchar(max) = ##searchfor:string?carefully %listen##
select id [Post Link]
    , score
    , creationdate
    , lastactivitydate
    , closeddate 
    , owneruserid as [User Link]
from posts
where body like concat('%', @search, '%') collate SQL_Latin1_General_CP1_CI_AI
or title like concat('%', @search, '%') collate SQL_Latin1_General_CP1_CI_AI

裡面的雙數字元號##是什麼意思?

我猜那是某種字元串語法,但我什至無法猜測它的關鍵字。Google搜尋“SQL中的數字元號##”返回“前綴臨時表”,但事實並非如此。

##圍繞Stack Exchange 數據資源管理器(SEDE) 中的查詢參數。

後面的部分?是顯示的預設參數值。

來自Monica Cellio 編寫的SEDE 教程:

注意:用於參數的特定語法特定於 SEDE。到目前為止,我們所說的關於 SQL 的所有內容都適用於所有類型的 SQL。這是不同的。

如該查詢所示,您可以通過用雙井號將其名稱括起來來引用參數,例如##MinScore##。您可以選擇指定數據類型(int(整數)、float(具有十進制值的數字,如 2.5)或字元串):##MinScore:int##。如果您指定了一個類型,那麼 SEDE 將針對該類型驗證值,因此如果您期望分數的數字並且有人鍵入“獨角獸”,則查詢將不會執行。如果您不指定類型,您的查詢可能會收到意外的輸入。


##在標準 SQL 中沒有任何意義。雖然這裡不是這種情況,但它在 Transact-SQL 中用作標識全域臨時對象的前綴:

正常標識符的規則

以數字元號開頭的標識符表示臨時表或過程。以雙數字元號 (##) 開頭的標識符表示全域臨時對象。儘管可以使用數字元號或雙數字元號字元來開始其他類型對象的名稱,但我們不推薦這種做法。

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