SQL中的双数字符号##是什么意思?

WXJ*_*163 11 sql-server stack-exchange-data-explorer

元后给出了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
Run Code Online (Sandbox Code Playgroud)

双数字符号##在那里是什么意思?

我猜这是某种字符串语法,但我什至无法猜测它的关键字。谷歌搜索“SQL中的数字符号##”返回“前缀临时表”,事实并非如此。

Pau*_*ite 25

##包含Stack Exchange Data Explorer (SEDE) 中的查询参数。

后面的部分?是显示的默认参数值。

来自Monica Cellio 编写的SEDE 教程

注意:用于参数的特定语法特定于 SEDE。到目前为止,我们所说的关于 SQL 的所有内容都适用于所有类型的 SQL。这是不同的。

如该查询所示,您可以通过用双井号将其名称括起来来引用参数,例如##MinScore##。您可以选择指定数据类型(int(整数)、float(带有十进制值的数字,如 2.5)或字符串):##MinScore:int##。如果您指定一个类型,那么 SEDE 将根据该类型验证值,因此如果您期望分数的数字并且有人键入“unicorn”,则查询将不会运行。如果您不指定类型,您的查询可能会收到意外的输入。


##在标准 SQL 中没有意义。虽然这里不是这种情况,但它在 Transact-SQL 中用作前缀来标识全局临时对象:

常规标识符的规则

以数字符号开头的标识符表示临时表或过程。以双数字符号 (##) 开头的标识符表示全局临时对象。尽管可以使用数字符号或双数字符号字符作为其他类型对象的名称的开头,但我们不推荐这种做法。