Que signifie le signe double dièse ## en SQL?

Une meta post donne un bel extrait de code 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 

Que signifie le double signe dièse ## là-dedans?

Je suppose que cest une sorte de syntaxe de chaîne, mais je ne peux même pas deviner un mot-clé pour cela. googler « number sign ## in SQL » renvoie « prefix temporaire tables » , qui est pas le cas.

Réponse

## entoure un paramètre de requête dans le Stack Exchange Data Explorer (SEDE).

La partie après ? est la valeur par défaut affichée valeur du paramètre.

Du Tutoriel SEDE rédigé par Monica Cellio:

Remarque: la syntaxe particulière utilisée pour les paramètres est spécifique à SEDE. Tout ce que nous avons dit jusquà présent à propos de SQL est vrai pour toutes les versions de SQL; cest différent.

Comme le montre cette requête, vous faites référence à un paramètre en entourant son nom de signes dièse doublés, tels que ## MinScore ##. Vous pouvez éventuellement spécifier le type de données (int (un nombre entier), float (un nombre avec une valeur décimale, comme 2,5) ou chaîne): ## MinScore: int ##. Si vous spécifiez un type alors SEDE validera les valeurs par rapport à ce type, de sorte que si vous « attendez un nombre pour le score et que quelquun tape " unicorn " le la requête ne sera pas exécutée. Si vous ne spécifiez pas de type, votre requête peut recevoir des entrées inattendues.


## na aucune signification en SQL standard. Bien que ce ne soit pas le cas ici, il est utilisé dans Transact-SQL comme préfixe pour identifier un objet temporaire global:

Règles pour les identifiants réguliers

Un identifiant qui commence par un signe dièse indique une table ou une procédure temporaire. Un identifiant qui commence par des signes numériques doubles (##) désigne un objet temporaire global. Bien que le signe dièse ou le double signe dièse puisse être utilisé pour commencer les noms dautres types dobjets, nous ne recommandons pas cette pratique.

Commentaires

  • Il peut être intéressant de noter que vous utiliseriez une table temporaire globale dans SQL Server lorsque vous devez créer une table temporaire qui doit être accessible par plusieurs sessions différentes, mais table nest pas idéale.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *