Есть ли в SQL Server понятие «включаемый файл»?

19

У меня есть набор скриптов, которые нужно запускать в определенном порядке. Я хотел бы создать «главный файл», в котором перечислены все другие файлы и их правильный порядок. В основном, как включаемый файл из C ++ или ASP / VBScript.

Джонатан Аллен
источник

Ответы:

19

Если вы используете SQLCMD , вы можете :r FileNameвключить отдельный файл .sql.

: r FileName

Анализирует дополнительные операторы T-SQL и команды SQLCMD из файла, указанного в FileName, в кэш операторов. FileName читается относительно каталога запуска Visual Studio. Файл читается и исполняется после того, как встречается терминатор пакета. Вы можете выполнить несколько команд: r. Файл может включать в себя любую команду SQLCMD, включая терминатор пакета, определенный в разделе «Инструменты», «Параметры». Вы можете использовать: r в сценарии перед развертыванием или после развертывания, чтобы включить другие сценарии.

Майкл Фредриксон
источник
Вы сами используете эту функцию?
bernd_k
Я активно использую его в проектах SQL Server Data Tools. Это действительно помогает, когда я пытаюсь организовать пример данных, которые выполняются как пост-скрипт.
Джонатан Аллен
4

В смысле древних препроцессоров С точно нет


Если у вас есть набор файлов с заданными абсолютными путями, которые вы хотите включить в безусловном порядке, вы можете использовать инструмент командной строки sqlcmd или использовать SSMS в sqlcmdmode, как упомянуто @mfredrickson и @Marian.


Но если вам нужны относительные пути или условные включения, вам нужно использовать некоторую оболочку, вызывающую sqlcmd (или один из его устаревших предшественников isql или osql).

В настоящее время на моей работе в этой ситуации я проверяю и расширяю старые VBS и HTA-код. Я не совсем счастлив, но это прагматичное решение. Это работает, и конечный пользователь дома с графическим интерфейсом hta, и никакой дополнительной установки программного обеспечения не требуется.

Для свежего дизайна я бы начал думать об использовании WPF и PowerShell для упаковки вызовов sqlcmd, но с нашими нынешними клиентами я не могу предположить наличие PowerShell V2.

В прежние времена мы писали простые пакеты cmd для этой цели, некоторые из них все еще используются.

Я думаю, что есть текущие инструменты, особенно те, которые нацелены на рабочие процессы, которые могут быть здесь подходящими. Я не знаком с этим.

bernd_k
источник
3

Наряду с режимом SQLCMD в Management Studio вы также можете использовать командный файл для использования в качестве основного файла для организации и вызова всех ваших файлов sql с помощью утилиты SQLCMD .

Режим SQLCMD - это симуляция использования утилиты в Management Studio, поэтому между режимами нет большой разницы. За исключением того, что иногда я предпочитаю запускать пакеты (больше не нужно открывать M Studio ... загружать правильные базы данных ... и т. Д.). Я предпочитаю настраивать все в пакете, включая выходные файлы.

Мэриан
источник
2

Я согласен, препроцессор T-SQL крайне необходим. Я разработал свой собственный на C #, что заняло у меня около часа. Помимо контроля над порядком выполнения сценариев SQL, он также позволяет мне иметь макросы, которые выглядят как скалярные UDF и удобны в использовании, но работают так же быстро, как и встроенные UDF.

Аляска
источник
+1 - я делал подобные вещи с инструментами шаблонов несколько раз. Хотя в sqlcmd есть некоторые возможности для подстановки переменных, я бы порекомендовал кому-то, кто реализовал достойный плагин препроцессора макросов для SSMS, снизу.
ConcernedOfTunbridgeWells
1
@AK, не могли бы вы подробнее остановиться на этом? Возможно выложить какой-нибудь код на github?
Крейг
2

Мне нравится ответ bernd_k . В зависимости от того, как вы назвали свои сценарии, например, включение числа, SQL Server PowerShell (SQLPS) может использоваться, если вы работаете с SQL Server 2008 или более поздней версии. Тогда даже если бы вы использовали SQL 2005, вы могли бы использовать PowerShell и SMO ​​для 2005.

Примечание: я полагаю, что SQLCMD будет в конечном итоге включен в список устаревших и заменяется на SQLPS, PowerShell.

Есть также несколько других вариантов.

  1. Настройте каждый сценарий как шаг в задании агента SQL. Вы можете установить порядок их выполнения.
  2. Создайте пакет служб SSIS для вызова каждого файла. Это может предложить немного больше контроля и предложить немного больше опций регистрации. Мне нравится этот метод, если результат одного сценария должен быть проверен до следующего выполнения.
Шон Мелтон
источник
Я не думаю, что SQLCMD будет устаревшим, потому что это так важно для работы инструментов данных SQL Server и DACPAC.
Джонатан Аллен
@JonathanAllen Если вам случится найти какую-либо текущую документацию, которая показывает управление DACPAC с помощью, SQLCMDдайте мне знать, потому что большинство из того, что я нахожу, ссылается на PowerShell . Я также не вижу ссылки, где sqlcmdиспользуется SSDT, за исключением, может быть, сравнения схем, но я никогда не использую сгенерированные сценарии.
Шон Мелтон
Сценарии SSDT являются сценариями sqlcmd. Вот как он обрабатывает параметры, как пользовательские, так и такие, как имя базы данных. Если вы хотите развернуть DACPAC с помощью SqlPackage.exe, эта ссылка показывает, как передавать параметры sqlcmd. msdn.microsoft.com/en-us/…
Джонатан Аллен