Ein Meta-Post enthält einen schönen Ausschnitt aus 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
Was bedeutet das doppelte Zahlenzeichen ## dort?
Ich denke, das ist eine Art String-Syntax, aber ich kann nicht einmal ein Schlüsselwort dafür erraten. googelt „Nummernzeichen ## in SQL“ gibt „temporäre Präfixtabellen“ zurück nicht der Fall.
Antwort
##
umgibt einen Abfrageparameter im Stapelaustauschdaten-Explorer (SEDE).
Der Teil nach ?
ist die angezeigte Standardeinstellung Parameterwert.
Aus dem SEDE-Tutorial von Monica Cellio:
Hinweis: Die für Parameter verwendete Syntax ist spezifisch für SEDE. Alles, was wir bisher über SQL gesagt haben, gilt für alle SQL-Varianten. Dies ist unterschiedlich.
Wie in dieser Abfrage gezeigt, verweisen Sie auf einen Parameter, indem Sie seinen Namen mit doppelten Nummernzeichen umgeben, z ## MinScore ##. Optional können Sie den Datentyp (int (eine ganze Zahl), float (eine Zahl mit einem Dezimalwert wie 2.5) oder string angeben: ## MinScore: int ##. Wenn Sie a angeben Geben Sie dann ein, und SEDE überprüft die Werte für diesen Typ. Wenn Sie also eine Zahl für die Punktzahl erwarten und jemand " unicorn " the Abfrage wird nicht ausgeführt. Wenn Sie keinen Typ angeben, erhält Ihre Abfrage möglicherweise unerwartete Eingaben.
##
hat in Standard-SQL keine Bedeutung. Obwohl dies hier nicht der Fall ist, wird es in Transact-SQL als Präfix verwendet, um ein globales temporäres Objekt zu identifizieren:
Regeln für reguläre Bezeichner
Ein Bezeichner, der mit einem Nummernzeichen beginnt, bezeichnet eine temporäre Tabelle oder Prozedur. Ein Bezeichner, der mit doppelten Zahlenzeichen (##) beginnt, kennzeichnet ein globales temporäres Objekt. Obwohl das Nummernzeichen oder das doppelte Nummernzeichen verwendet werden kann, um die Namen anderer Objekttypen zu beginnen, wird diese Vorgehensweise nicht empfohlen.
Kommentare
- Es kann erwähnenswert sein, dass Sie eine globale temporäre Tabelle in SQL Server verwenden, wenn Sie eine temporäre Tabelle erstellen müssen, auf die mehrere verschiedene Sitzungen zugreifen müssen, jedoch eine permanente Tabelle ist nicht ideal.