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.