it-swarm-eu.dev

Existuje na serveru SQL Server koncept „zahrnout soubor“?

Mám sadu skriptů, které je třeba spustit v určitém pořadí. Chtěl bych vytvořit „hlavní soubor“, který obsahuje seznam všech ostatních souborů a jejich správné pořadí. V podstatě jako zahrnout soubor z C++ nebo ASP/VBScript.

19
Jonathan Allen

Pokud používáte SQLCMD , můžete použít :r FileName zahrnout samostatný soubor .sql.

: r Název_souboru

Analyzuje další příkazy T-SQL a příkazy SQLCMD ze souboru určeného FileName do mezipaměti příkazů. FileName se čte relativně ke spouštěcímu adresáři pro Visual Studio. Soubor je načten a spuštěn poté, co se objeví dávkový terminátor. Můžete zadat více příkazů: r. Soubor může obsahovat jakýkoli příkaz SQLCMD, včetně dávkového terminátoru, který je definován v nabídce Nástroje, Možnosti. Můžete použít: r ve skriptu před nasazením nebo po nasazení pro zahrnutí dalších skriptů.

19

Ve smyslu starověku C preprocesoři rozhodně ne

  • T-SQL sám o sobě takový koncept nemá
  • sqlcmd a sqlcmdmode SSMS nezpracovávají relativní cesty k souborům
  • sqlcmd a sqlcmdmode SSMS nepodporují včetně

Pokud máte sadu souborů s danými absolutními cestami, které chcete zahrnout do bezpodmínečného pořadí, můžete použít nástroj příkazového řádku sqlcmd nebo použít SSMS v sqlcmdmode, jak je uvedeno v @mfredrickson a @Marian.


Ale pokud chcete, aby relativní cesty nebo podmíněné zahrnovaly, musíte použít nějaký wrapper, který volá sqlcmd (nebo jeden z jeho zastaralých předchůdců isql nebo osql).

V současné době pracuji v této situaci a kontroluji a rozšiřuji staré vbs a hta kód. Nejsem úplně šťastný, ale je to pragmatické rozhodnutí. Funguje to a koncový uživatel je doma s grafickým rozhraním hta a není nutná žádná další instalace softwaru.

Pro nový design bych začal přemýšlet o použití WPF a PowerShell k zabalení hovorů sqlcmd, ale u našich současných zákazníků nemohu předpokládat přítomnost PowerShell V2.

V dřívějších dobách jsme pro tento účel psali jednoduché šarže cmd, z nichž se jich stále používá.

Myslím, že existují současné nástroje, zejména ty, které se zaměřují na pracovní postupy, které by zde mohly být vhodné. Nejsem s nimi obeznámen.

4
bernd_k

Spolu s režim SQLCMD v Management Studio můžete také použít dávkový soubor jako hlavní soubor k uspořádání a zavolání všech vašich souborů sql pomocí obslužný program SQLCMD .

Režim SQLCMD je simulací využití nástroje uvnitř Management Studio, takže mezi režimy není velký rozdíl. Až na to, že někdy dávám přednost spuštění dávek (žádné další otevírání M Studio ... načítání správné db ... atd.). Raději nakonfiguruji vše v dávce, včetně výstupních souborů.

3
Marian

Souhlasím, že je nezbytně zapotřebí preprocesor T-SQL. Vyvinul jsem svůj vlastní v C #, což mi trvalo asi hodinu. Kromě kontroly nad prováděním SQL skriptů mi to také umožňuje mít makra, která vypadají jako skalární UDF a jsou pohodlně použitelná, ale fungují stejně rychle jako inline UDF.

2
A-K

Líbí se mi odpověď bernd_k . V závislosti na tom, jak jste své skripty pojmenovali, jako je například vložení čísla, lze použít SQL Server PowerShell (SQLPS), pokud používáte SQL Server 2008 nebo vyšší. Pak, i kdybyste používali SQL 2005, mohli byste pro rok 2005 využít PowerShell a SMO.

Vedlejší poznámka: Věřím, že SQLCMD bude nakonec zařazen do odpisovaného seznamu a bude nahrazen SQLPS, PowerShell.

Existuje i několik dalších možností.

  1. Nastavte každý skript jako krok v úloze Agenta SQL. Můžete nastavit pořadí jejich provedení.
  2. Vytvořte balíček SSIS pro volání každého souboru. To může nabídnout trochu větší kontrolu a nabídnout trochu více možností protokolování. Líbí se mi tato metoda, pokud je třeba ověřit výsledek jednoho skriptu před provedením dalšího skriptu.
2
user507