#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. правильно, однако, если вы сообщите нам, в чем заключается ваша первоначальная проблема, которую нужно решить, возможно, мы сможем помочь вам лучше.