meta post zawiera ładny fragment 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 oznacza podwójny znak liczbowy ##?
Wydaje mi się, że jest to jakaś składnia ciągu, ale nie mogę nawet odgadnąć słowa kluczowego. googling „znak numeru ## w SQL” zwraca „prefiks tabel tymczasowych” , czyli nie w tym przypadku.
Odpowiedź
##
otacza parametr zapytania w Stack Exchange Data Explorer (SEDE).
Część po ?
jest wyświetlaną wartością domyślną wartość parametru.
Z samouczka SEDE napisanego przez Monikę Cellio:
Uwaga: szczególna składnia używana dla parametrów jest specyficzna dla SEDE. Wszystko, co powiedzieliśmy do tej pory o SQL, jest prawdziwe dla wszystkich odmian SQL; to jest inne.
Jak pokazano w tym zapytaniu, odwołujesz się do parametru, otaczając jego nazwę podwójnymi znakami funta, takimi jak ## MinScore ##. Opcjonalnie możesz określić typ danych (int (liczba całkowita), float (liczba z wartością dziesiętną, np. 2,5) lub string): ## MinScore: int ##. Jeśli określisz typ, SEDE zweryfikuje wartości względem tego typu, więc jeśli „oczekujesz liczby dla wyniku i ktoś wpisze " jednorożec " zapytanie nie zostało uruchomione. Jeśli nie określisz typu, zapytanie może otrzymać nieoczekiwane dane wejściowe.
##
nie ma znaczenia w standardowym SQL. Chociaż tak nie jest w tym przypadku, jest używany w Transact-SQL jako przedrostek do identyfikacji globalnego obiektu tymczasowego:
Reguły dla zwykłych identyfikatorów
Identyfikator, który zaczyna się od znaku liczby, oznacza tymczasową tabelę lub procedurę. Identyfikator zaczynający się od podwójnych cyfr (##) oznacza globalny obiekt tymczasowy. Chociaż znaki cyfry lub znaki podwójnej cyfry mogą być używane do rozpoczynania nazw innych typów obiektów, nie zalecamy tej praktyki.
Komentarze
- Warto zauważyć, że globalną tabelę tymczasową można użyć w SQL Server, gdy trzeba utworzyć tymczasową tabelę, do której dostęp musi mieć wiele różnych sesji, ale tabela nie jest idealna.