¿Qué significa el signo de número doble ## en SQL?

Una meta publicación ofrece un buen fragmento 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 

¿Qué significa el signo de número doble ## allí?

Supongo que es algún tipo de sintaxis de cadena, pero ni siquiera puedo adivinar una palabra clave para eso. buscar en Google «signo de número ## en SQL» devuelve «tablas temporales de prefijo» , que es no es el caso.

Respuesta

## rodea un parámetro de consulta en el Explorador de datos de Stack Exchange (SEDE).

La parte después de ? es el valor predeterminado que se muestra valor del parámetro.

Del Tutorial SEDE escrito por Monica Cellio:

Nota: la sintaxis particular utilizada para los parámetros es específica de SEDE. Todo lo que hemos dicho hasta ahora sobre SQL es cierto para todos los tipos de SQL; esto es diferente.

Como se muestra en esta consulta, se hace referencia a un parámetro rodeando su nombre con signos de almohadilla duplicados, como ## MinScore ##. Opcionalmente, puede especificar el tipo de datos (int (un número entero), float (un número con un valor decimal, como 2.5) o cadena): ## MinScore: int ##. Si especifica un escriba, entonces SEDE validará los valores contra ese tipo, de modo que si «está esperando un número para la puntuación y alguien escribe " unicorn " el la consulta no se ejecutará. Si no especifica un tipo, su consulta puede recibir entradas inesperadas.


## no tiene significado en SQL estándar. Aunque no es el caso aquí, se usa en Transact-SQL como un prefijo para identificar un objeto temporal global:

Reglas para identificadores regulares

Un identificador que comienza con un signo de número denota una tabla o procedimiento temporal. Un identificador que comienza con signos de números dobles (##) denota un objeto temporal global. Aunque los caracteres de signo de número o de signo de número doble se pueden utilizar para comenzar los nombres de otros tipos de objetos, no recomendamos esta práctica.

Comentarios

  • Podría valer la pena señalar que usaría una tabla temporal global en SQL Server cuando necesite crear una tabla temporal a la que deba acceder varias sesiones diferentes, pero una tabla temporal la tabla no es ideal.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *