Odpowiedzi:
Jak już powiedziano, nie ma sposobu.
Jedną z rzeczy, które robimy, jest szybkie sprawdzenie w nagłówku skryptu, aby ustalić, czy tryb SQLCMD jest włączony (i zakończyć skrypt, jeśli nie):
:setvar DatabaseName "MyDatabase"
GO
IF ('$(DatabaseName)' = '$' + '(DatabaseName)')
RAISERROR ('This script must be run in SQLCMD mode. Disconnecting.', 20, 1) WITH LOG
GO
-- The below is only run if SQLCMD is on, or the user lacks permission to raise fatal errors
IF @@ERROR != 0
SET NOEXEC ON
GO
PRINT 'You will not see this unless SQLCMD mode is on'
-- Rest of script goes here
GO
SET NOEXEC OFF
GO
Jest powód, dla którego używany jest wskaźnik ważności 20, który ma tendencję do natychmiastowego GO
przerywania połączenia, co uniemożliwia uruchomienie dodatkowego kodu skryptu, nawet jeśli w skrypcie znajdują się terminatory wsadowe.
Wskazują problemy systemowe i są to błędy krytyczne, co oznacza, że zadanie aparatu bazy danych, które wykonuje instrukcję lub partia, nie jest już uruchomione. Zadanie rejestruje informacje o tym, co się wydarzyło, a następnie zostaje zakończone. W większości przypadków połączenie aplikacji z instancją aparatu bazy danych może również zostać zakończone . Jeśli tak się stanie, w zależności od problemu aplikacja może nie być w stanie połączyć się ponownie.
Komunikaty o błędach w tym zakresie mogą wpływać na wszystkie procesy uzyskujące dostęp do danych w tej samej bazie danych i mogą wskazywać na uszkodzenie bazy danych lub obiektu. Komunikaty błędów o poziomie ważności od 19 do 24 są zapisywane w dzienniku błędów.
SET NOEXEC ON
jako dodatkowy środek bezpieczeństwa, aby zapobiec uruchomieniu wszystkiego innego w skrypcie.
Nie.
Ale zawsze możesz działać w trybie SQLCMD i mieć w nim T-SQL
Aby wprowadzić wyraźne rozróżnienie między poleceniami SQLCMD a Transact-SQL, wszystkie polecenia SQLCMD muszą być poprzedzone dwukropkiem (:).