Cosa significa il doppio numero di segno ## in SQL?

Un meta post fornisce un bel frammento di 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 

Cosa significa il simbolo del doppio numero ##?

Immagino che sia una sorta di sintassi delle stringhe, ma non riesco nemmeno a indovinare una parola chiave per questo. googling “number sign ## in SQL” restituisce “prefisso tabelle temporanee” , che è non è il caso.

Risposta

## racchiude un parametro di ricerca nel Stack Exchange Data Explorer (SEDE).

La parte dopo ? è limpostazione predefinita visualizzata valore del parametro.

Dal SEDE Tutorial scritto da Monica Cellio:

Nota: la particolare sintassi utilizzata per i parametri è specifica di SEDE. Tutto ciò che abbiamo detto finora su SQL è vero per tutte le versioni di SQL; questo è diverso.

Come mostrato in questa query, fai riferimento a un parametro racchiudendo il suo nome con il doppio cancelletto, come ## MinScore ##. Opzionalmente puoi specificare il tipo di dati (int (un numero intero), float (un numero con un valore decimale, come 2.5) o stringa): ## MinScore: int ##. Se specifichi un type, SEDE convaliderà i valori rispetto a quel tipo, in modo che se “ti aspetti un numero per il punteggio e qualcuno digita " unicorn " il la query non viene eseguita. Se non specifichi un tipo, la query potrebbe ricevere input imprevisti.


## non ha alcun significato nellSQL standard. Sebbene non sia il caso qui, viene utilizzato in Transact-SQL come prefisso per identificare un oggetto temporaneo globale:

Regole per identificatori regolari

Un identificatore che inizia con un segno di numero denota una tabella o procedura temporanea. Un identificatore che inizia con il doppio segno numerico (##) denota un oggetto temporaneo globale. Sebbene il segno del numero o il doppio segno del numero possano essere usati per iniziare i nomi di altri tipi di oggetti, non consigliamo questa pratica.

Commenti

  • Potrebbe valere la pena notare che utilizzeresti una tabella temporanea globale in SQL Server quando devi creare una tabella temporanea a cui deve accedere più sessioni diverse, ma un permanente table non è lideale.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *