O que significa o sinal de número duplo ## em SQL?

Uma meta post fornece um bom trecho de 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 

O que o sinal de número duplo ## significa aí?

Acho que é algum tipo de sintaxe de string, mas não consigo nem adivinhar uma palavra-chave para isso. googling “sinal numérico ## in SQL” retorna “prefixo tabelas temporárias” , que é não é o caso.

Resposta

## envolve um parâmetro de consulta no Stack Exchange Data Explorer (SEDE).

A parte após ? é o padrão exibido valor do parâmetro.

Do Tutorial SEDE escrito por Monica Cellio:

Nota: a sintaxe particular usada para parâmetros é específica para SEDE. Tudo o que dissemos até agora sobre SQL é verdadeiro para todos os tipos de SQL; isso é diferente.

Conforme mostrado nesta consulta, você se refere a um parâmetro cercando seu nome com sinais de libra duplos, como ## MinScore ##. Opcionalmente, você pode especificar o tipo de dados (int (um número inteiro), float (um número com um valor decimal, como 2,5) ou string): ## MinScore: int ##. Se você especificar um digite o SEDE validará os valores em relação a esse tipo, de modo que se você estiver esperando um número para pontuação e alguém digitar " unicorn " o a consulta não será executada. Se você não especificar um tipo, sua consulta poderá receber entradas inesperadas.


## não tem significado no SQL padrão. Embora não seja o caso aqui, ele é usado no Transact-SQL como um prefixo para identificar um objeto temporário global:

Regras para identificadores regulares

Um identificador que começa com um sinal de número denota uma tabela ou procedimento temporário. Um identificador que começa com sinais numéricos duplos (##) denota um objeto temporário global. Embora o sinal de número ou os caracteres do sinal de número duplo possam ser usados para iniciar os nomes de outros tipos de objetos, não recomendamos esta prática.

Comentários

  • Pode ser interessante notar que você usaria uma tabela temporária global no SQL Server quando precisar criar uma tabela temporária que deve ser acessada por várias sessões diferentes, mas um mesa não é ideal.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *