Et meta innlegg gir et fint 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
Hva betyr dobbelt talltegn ## der inne?
Jeg antar at det er en slags strengsyntaks, men jeg kan ikke engang gjette et nøkkelord for det. googling «nummertegn ## i SQL» returnerer «prefiks midlertidige tabeller» , som er ikke tilfelle.
Svar
##
omgir en spørringsparameter i Stack Exchange Data Explorer (SEDE).
Delen etter ?
er den viste standard parameterverdi.
Fra SEDE-veiledning skrevet av Monica Cellio:
Merk: den spesifikke syntaksen som brukes for parametere er spesifikk for SEDE. Alt vi har sagt så langt om SQL gjelder for alle smaker av SQL. Dette er annerledes.
Som vist i dette spørsmålet, refererer du til en parameter ved å omgi navnet med doble pundtegn, for eksempel ## MinScore ##. Valgfritt kan du spesifisere datatypen (int (et helt tall), float (et tall med en desimalverdi, som 2,5) eller streng): ## MinScore: int ##. Hvis du angir en skriv inn så SEDE vil validere verdier mot den typen, slik at hvis du forventer et tall for poengsum og noen skriver " enhjørning " spørringen vant ikke. Hvis du ikke spesifiserer en type, kan spørringen din motta uventede innganger.
##
har ingen betydning i standard SQL. Selv om det ikke er tilfelle her, brukes det i Transact-SQL som et prefiks for å identifisere et globalt midlertidig objekt:
Regler for vanlige identifikatorer
En identifikator som starter med et talltegn angir en midlertidig tabell eller prosedyre. En identifikator som starter med doble tall (##) betegner et globalt midlertidig objekt. Selv om talltegn eller doble talltegn kan brukes til å starte navnene på andre typer objekter, anbefaler vi ikke denne fremgangsmåten.
Kommentarer
- Det kan være verdt å merke seg at du vil bruke en global midlertidig tabell i SQL Server når du trenger å lage en midlertidig tabell som må nås av flere forskjellige økter, men en permanent tabellen er ikke ideell.