メタ投稿は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
二重番号記号##は、そこではどういう意味ですか?
これはある種の文字列構文だと思いますが、そのキーワードを推測することすらできません。 「SQLの番号記号##」をグーグルで検索すると 「プレフィックス一時テーブル」が返されます。そうではありません。
回答
##
は、<のクエリパラメータを囲みますdiv id = "a07786e3d3">
Stack Exchange Data Explorer (SEDE)。
?
の後の部分がデフォルトで表示されます。パラメータ値。
MonicaCellioによって作成された SEDEチュートリアルから:
注:パラメーターに使用される特定の構文は、SEDEに固有です。これまでにSQLについて述べてきたことはすべて、SQLのすべての種類に当てはまります。これは異なります。
このクエリに示されているように、パラメータの名前を2つのポンド記号で囲むことで参照します。 ## MinScore ##。オプションで、データ型(int(整数)、float(2.5などの10進値の数値)、または文字列)を指定できます:## MinScore:int ##。タイプすると、SEDEはそのタイプに対して値を検証するため、「スコアの数値を期待していて、誰かが" unicorn "と入力した場合クエリは実行されません。タイプを指定しないと、クエリが予期しない入力を受け取る可能性があります。
##
は標準SQLでは意味がありません。ここではそうではありませんが、Transact-SQLでは、グローバル一時オブジェクトを識別するためのプレフィックスとして使用されます。
通常の識別子のルール
番号記号で始まる識別子は、一時的なテーブルまたはプロシージャを示します。二重番号記号(##)で始まる識別子は、グローバル一時オブジェクトを示します。番号記号または二重番号記号文字を使用して他の種類のオブジェクトの名前を開始することはできますが、この方法はお勧めしません。
コメント
- 複数の異なるセッションからアクセスする必要があるが永続的な一時テーブルを作成する必要がある場合は、SQLServerでグローバル一時テーブルを使用することに注意してください。テーブルは理想的ではありません。