meta příspěvek poskytuje pěkný fragment kódu 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
Co tam znamená znaménko dvojitého čísla ##?
Myslím, že to je nějaká syntaxe řetězce, ale nemohu k tomu ani uhodnout klíčové slovo. googling „číslo znaménka ## v SQL“ vrátí „prefix dočasné tabulky“ , což je není tomu tak.
Odpověď
##
obklopuje parametr dotazu v Stack Exchange Data Explorer (SEDE).
Část za ?
je zobrazená výchozí hodnota hodnota parametru.
Z Výukového programu SEDE napsaného Monikou Cellio:
Poznámka: konkrétní syntaxe použitá pro parametry je specifická pro SEDE. Všechno, co jsme doposud řekli o SQL, platí pro všechny varianty SQL; toto je jiné.
Jak je ukázáno v tomto dotazu, odkazujete na parametr obklopením jeho názvu dvojitými znaky libry, například ## MinScore ##. Volitelně můžete zadat datový typ (int (celé číslo), float (číslo s desetinnou hodnotou, například 2,5) nebo řetězec): ## MinScore: int ##. Pokud zadáte a zadejte, potom SEDE ověří hodnoty proti tomuto typu, takže pokud očekáváte číslo pro skóre a někdo zadá " unicorn " dotaz nebude spuštěn. Pokud neurčíte typ, může váš dotaz obdržet neočekávané vstupy.
##
nemá ve standardním SQL žádný význam. Ačkoli tomu tak není, používá se v Transact-SQL jako předpona k identifikaci globálního dočasného objektu:
Pravidla pro běžné identifikátory
Identifikátor, který začíná znakem čísla, označuje dočasnou tabulku nebo postup. Identifikátor, který začíná znaky dvojitého čísla (##), označuje globální dočasný objekt. Přestože znaky počátečního znaku nebo znaku dvojitého čísla lze použít k zahájení názvů jiných typů objektů, tento postup nedoporučujeme.
Komentáře
- Za zmínku stojí, že byste měli použít globální dočasnou tabulku na serveru SQL Server, když potřebujete vytvořit dočasnou tabulku, ke které musí mít přístup několik různých relací, ale trvalá tabulka není ideální.