Et meta-indlæg giver et flot stykke 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
Hvad betyder dobbelt taltegn ## derinde?
Jeg tror det er en slags strengsyntaks, men jeg kan ikke engang gætte et nøgleord til det. googling “nummertegn ## i SQL” returnerer “præfiks midlertidige tabeller” , hvilket er ikke tilfældet.
Svar
##
omgiver en forespørgselsparameter i Stack Exchange Data Explorer (SEDE).
Delen efter ?
er den viste standard parameterværdi.
Fra SEDE-tutorial skrevet af Monica Cellio:
Bemærk: den bestemte syntaks, der bruges til parametre, er specifik for SEDE. Alt, hvad vi hidtil har sagt om SQL, gælder for alle varianter af SQL; dette er anderledes.
Som vist i denne forespørgsel henviser du til en parameter ved at omslutte dens navn med fordoblede pundtegn, såsom ## MinScore ##. Valgfrit kan du angive datatypen (int (et helt tal), float (et tal med en decimalværdi som 2,5) eller en streng): ## MinScore: int ##. Hvis du angiver en skriv så SEDE validerer værdier i forhold til den type, så hvis du “forventer et tal for score, og nogen skriver " enhjørning " forespørgsel vandt ikke. Hvis du ikke angiver en type, kan din forespørgsel muligvis modtage uventede input.
##
har ingen betydning i standard SQL. Selvom det ikke er tilfældet her, bruges det i Transact-SQL som et præfiks til at identificere et globalt midlertidigt objekt:
Regler for almindelige identifikatorer
En identifikator, der starter med et taltegn, angiver en midlertidig tabel eller procedure. En identifikator, der starter med dobbelt taltegn (##), angiver et globalt midlertidigt objekt. Selvom taltegnet eller dobbelttegnetegnene kan bruges til at begynde navnene på andre typer objekter, anbefaler vi ikke denne praksis.
Kommentarer
- Det kan være værd at bemærke, at du bruger en global midlertidig tabel i SQL Server, når du har brug for at oprette en midlertidig tabel, der skal tilgås af flere forskellige sessioner, men en permanent tabellen er ikke ideel.