Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

как да запазите SQL съхранени процедури в .sql файлове чрез партида

Създайте партиден файл със скрипт (съжалявам за форматирането, но наистина трябва да е вграден, за да изпълни пакет):

osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_TYPE = 'PROCEDURE'" -n -o "sp_list.txt"
for /f %%a in (sp_list.txt) do osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_NAME = '%%a'" -n -o "%%a.sql"

Наречете го "run.bat". Сега, за да изпълните партида, използвайте параметри:
run.bat [потребителско име] [парола] [име на сървър] [база данни]
на пример:
run.bat sa pwd111 localhost\SQLEXPRESS master
първо всички имена на съхранени процедури ще бъдат съхранени във файла sp_list.txt, след това едно по едно в отделни скриптови файлове. Единственият проблем - последният ред на всеки скрипт с броя на резултатите - работя върху него :)

редактирано :коригирана грешка в заявката

Премахване на реда „Засегнати редове“
Добре, сега трябва да създадем още един пакет:

type %1 | findstr /V /i %2  > xxxtmpfile 
copy xxxtmpfile %1 /y /v
del xxxtmpfile

Наречете го "line_del.bat". Вижте, първият параметър е файл за обработка, 2-ри - низ за търсене на редове за премахване. Сега променете основния пакет (отново, съжалявам за форматирането):

osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_TYPE = 'PROCEDURE'" -n -o "sp_list.txt"
call line_del sp_list.txt "rows affected"
call line_del sp_list.txt "row affected"
for /f %%a in (sp_list.txt) do osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_NAME = '%%a'" -n -o "%%a.sql" 
for /f %%a in (sp_list.txt) do call line_del %%a.sql "rows affected"
for /f %%a in (sp_list.txt) do call line_del %%a.sql "row affected"

Вижте сродни статии:
Прости команди за програмиране в пакетна среда
osql помощна програма
MSSQL :Как скриптирате създаването на съхранена процедура с код?
Изтриване на определени редове в txt файл чрез пакетен файл

:) може да забележите, последните две са от SO!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвате SqlTransaction в C#

  2. Сложна SQL заявка - намиране на елементи, съответстващи на множество различни външни ключове

  3. SQL функции - факториел

  4. Как да добавите колона за файлов поток в първия дизайнер на модел Entity Framework 4.0?

  5. Групирайте таблицата в интервали от 15 минути