Czy w programie SQL Server istnieje koncepcja „dołączenia pliku”?

19

Mam zestaw skryptów, które należy uruchomić w określonej kolejności. Chciałbym utworzyć „plik główny”, który zawiera listę wszystkich pozostałych plików i ich prawidłową kolejność. Zasadniczo jak plik dołączany z C ++ lub ASP / VBScript.

Jonathan Allen
źródło

Odpowiedzi:

19

Jeśli używasz SQLCMD , możesz użyć, :r FileNameaby dołączyć osobny plik .sql.

: r nazwa_pliku

Analizuje dodatkowe instrukcje T-SQL i polecenia SQLCMD z pliku określonego przez FileName do pamięci podręcznej instrukcji. Nazwa pliku jest odczytywana względem katalogu startowego programu Visual Studio. Plik jest odczytywany i wykonywany po napotkaniu terminatora wsadowego. Możesz wydać wiele poleceń: r. Plik może zawierać dowolne polecenie SQLCMD, w tym terminator partii zdefiniowany w Narzędzia, Opcje. Możesz użyć: rw skrypcie przedwdrożeniowym lub powdrożeniowym, aby dołączyć inne skrypty.

Michael Fredrickson
źródło
Czy sam używasz tej funkcji?
bernd_k
Używam go intensywnie w projektach SQL Server Data Tools. To naprawdę pomaga, gdy próbuję uporządkować przykładowe dane, które działają jako skrypt postu.
Jonathan Allen,
4

W znaczeniu starożytnych preprocesorów C zdecydowanie nie

  • Sam T-SQL nie ma takiej koncepcji
  • sqlcmd i sqlcmdmode SSMS nie obsługują względnych ścieżek plików
  • sqlcmd i sqlcmdmode SSMS nie obsługują warunkowego włączania

Jeśli masz zestaw plików o podanych ścieżkach bezwzględnych, które chcesz dołączyć w bezwarunkowej kolejności, możesz użyć narzędzia wiersza poleceń sqlcmd lub SSMS w trybie sqlcmdmode, o czym wspominają @mfredrickson i @Marian.


Ale jeśli chcesz mieć ścieżki względne lub warunkowe, musisz użyć otoki wywołującej sqlcmd (lub jednego z przestarzałych poprzedników isql lub osql).

Obecnie w mojej pracy w tej sytuacji przeglądam i rozszerzam stary kod VBS i HTML. Nie jestem do końca szczęśliwy, ale jest to pragmatyczna decyzja. Działa, a użytkownik końcowy jest w domu z graficznym interfejsem użytkownika hta i nie jest wymagana dodatkowa instalacja oprogramowania.

Aby uzyskać nowy projekt, zacznę myśleć o użyciu WPF i PowerShell do zawijania wywołań sqlcmd, ale w przypadku naszych obecnych klientów nie mogę zakładać obecności PowerShell V2.

W dawnych czasach pisaliśmy w tym celu proste partie cmd, niektóre z nich wciąż są w użyciu.

Sądzę, że istnieją aktualne narzędzia, szczególnie te ukierunkowane na przepływy pracy, które mogą być tutaj odpowiednie. Nie znam ich.

bernd_k
źródło
3

Wraz z trybem SQLCMD w Management Studio, możesz także użyć pliku wsadowego, aby użyć go jako pliku głównego do aranżacji i wywoływania wszystkich plików SQL za pomocą narzędzia SQLCMD .

Tryb SQLCMD to symulacja użycia narzędzia w Management Studio, więc nie ma dużej różnicy między trybami. Tyle że czasami wolę uruchamiać partie (koniec otwierania M Studio ... ładowanie poprawnej bazy danych ... itd.). Wolę skonfigurować wszystko w partii, w tym pliki wyjściowe.

Marian
źródło
2

Zgadzam się, że preprocesor T-SQL jest bardzo potrzebny. Opracowałem własny w języku C #, co zajęło mi godzinę. Oprócz kontroli kolejności wykonywania skryptów SQL, pozwala mi to również mieć makra, które wyglądają jak skalarne UDF i są wygodne w użyciu, ale działają tak szybko jak wbudowane UDF.

AK
źródło
+1 - Robiłem takie rzeczy przy użyciu narzędzi do szablonów przy wielu okazjach. Chociaż sqlcmd ma pewne funkcje do zastępowania zmiennych, dałbym komuś, kto zaimplementował przyzwoitą wtyczkę preprocesora makr dla SSMS, wielki pocałunek na dole.
ConcernedOfTunbridgeWells
1
@AK, czy miałbyś coś więcej do omówienia? Może opublikujesz kod na github?
craig
2

Podoba mi się odpowiedź bernd_k . W zależności od tego, jak nazwałeś swoje skrypty, na przykład wraz z numerem, możesz użyć programu SQL Server PowerShell (SQLPS), jeśli korzystasz z programu SQL Server 2008 lub nowszego. Wtedy nawet jeśli korzystasz z SQL 2005, możesz użyć PowerShell i SMO dla 2005.

Uwaga dodatkowa: Wierzę, że SQLCMD ostatecznie zostanie umieszczony na liście amortyzacji i zostanie zastąpiony przez SQLPS, PowerShell.

Istnieje również kilka innych opcji.

  1. Ustaw każdy skrypt jako krok w zadaniu agenta SQL. Możesz ustawić kolejność ich wykonywania.
  2. Utwórz pakiet SSIS, aby wywoływać każdy plik. Może to zapewnić nieco większą kontrolę i nieco więcej opcji rejestrowania. Podoba mi się ta metoda, jeśli wynik jednego skryptu wymaga weryfikacji przed wykonaniem następnego.
Shawn Melton
źródło
Nie sądzę, że SQLCMD będzie amortyzowany, ponieważ jest tak ważny dla działania SQL Server Data Tools i DACPAC.
Jonathan Allen,
@JonathanAllen Jeśli zdarzy ci się znaleźć jakąkolwiek aktualną dokumentację, która pokazuje zarządzanie DACPAC za pomocą, SQLCMDdaj mi znać, ponieważ większość z tego, co znajduję, dotyczy PowerShell . Nie widzę też odniesienia, w którym sqlcmdjest używane z SSDT, może oprócz porównania schematów, ale nigdy nie używam wygenerowanych skryptów.
Shawn Melton
Skrypty SSDT to skrypty sqlcmd. W ten sposób obsługuje parametry zdefiniowane przez użytkownika i takie rzeczy, jak nazwa bazy danych. Jeśli chcesz wdrożyć DACPAC za pomocą SqlPackage.exe, ten link pokazuje, jak przekazać parametry narzędzia sqlcmd. msdn.microsoft.com/en-us/…
Jonathan Allen