Пакет SSMS / SQLCMD для создания всех хранимых процедур в подпапке

#sql-server #stored-procedures #ssms

#sql-server #хранимые процедуры #ssms

Вопрос:

Я разработал следующий скрипт T-SQL с небольшим количеством SQLCMD для вызова отдельного скрипта хранимых процедур для их создания. Хранимые процедуры расположены в дочерней Store Procedure папке (я хочу сохранить пространство).

Вероятно, это лучшие способы выполнить это, но я хочу использовать уникальный скрипт (но с использованием файлов), который создает базу данных, таблицы, хранимые процедуры и так далее.

Я не детализирую ни базу данных, ни сценарии таблиц.

 /* Create database (I still have some issues with dropping it (existing connections) */

*/ Create tables with constraints... */

-- Is it possible to declare a relative path (here MY_PARENT_PATH is replaced by "c:...")
:setvar STORE_PROCEUDRE_PATH "[MY_PARENT_PATH]Stored Procedures"

-- Calls CRUD stored procedures from separate scripts via SQLCMD - is it possible to batch it with all spXXX_XXXX.sql files included in the sub-folder?
:r $(STORE_PROCEUDRE_PATH)spFields_Create.sql
:r $(STORE_PROCEUDRE_PATH)spFields_Read.sql
:r $(STORE_PROCEUDRE_PATH)spFields_Update.sql
:r $(STORE_PROCEUDRE_PATH)spFields_Delete.sql

-- Idem for other table, such as Features, Values, etc.
  

Возможно ли зациклить все файлы spXXX_XXXX.sql-файлы в Store Procedure папке и выполнить :r $(STORE_PROCEUDRE_PATH)spXXX_XXXX.sql сценарии?

Я наткнулся на несколько статей, в которых показан пример использования FOR конструкции, но я запутался.

Спасибо за любую информацию 🙂

Ответ №1:

да, есть способ, SQLCMD не может перебирать файлы, но для этого вы можете использовать пакетные сценарии Windows.

вот хороший блог о том, как это сделать: SQLCMD и магия пакетных файлов

итак, в основном вам нужно создать файл .bat, например: CRUDE.bat, отредактировать и вставить в него приведенный ниже код и сохранить его ,

 @@echo off
cd "[MY_PARENT_PATH]Stored Procedures"

FOR %%A IN (*.SQL) DO ( sqlcmd -S [SERVERNAME] -d [DATABASE] -U [][username -P password] -i "%%A")
  

вам необходимо заменить эти значения своими значениями :

MY_PARENT_PATH: ваш путь или каталог, в котором находится ваш подчиненный порядок.

ИМЯ_СЕРВЕРА: имя вашего сервера базы данных.

DATABASE1: имя вашей базы данных.

Имя пользователя: ваше имя пользователя SQL.

Пароль: ваш пароль SQL.

теперь вы можете запустить пакетный файл, и он творит волшебство.

также здесь вы можете узнать больше об утилите SQLCMD

Комментарии:

1. Хорошо, спасибо, но, по-видимому, не так просто вызывать сценарии T-SQL из другого другого. Мне все еще нужно подумать об этом, потому что, насколько я понимаю, SQLCMD должен обычно выполняться извне SSMS, верно? Я, вероятно, собираюсь написать все в проекте SQL Server непосредственно из Visual Studio.

2. правильно, однако, если вы сообщите нам, в чем заключается ваша первоначальная проблема, которую нужно решить, возможно, мы сможем помочь вам лучше.