Cree un archivo por lotes con secuencia de comandos (perdón por el formato, pero realmente debería estar en línea para ejecutar el lote):
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"
Nómbrelo "run.bat". Ahora, para ejecutar el uso por lotes de parámetros:
run.bat [nombre de usuario] [contraseña] [nombre de servidor] [base de datos]
en el ejemplo:
run.bat sa pwd111 localhost\SQLEXPRESS master
primero todos los nombres de procedimientos almacenados se almacenarán en el archivo sp_list.txt, luego uno por uno en archivos de script separados. El único problema, la última línea de cada secuencia de comandos con el recuento de resultados, estoy trabajando en ello :)
editado :error en la consulta corregido
Eliminando la línea "Filas afectadas"
Bien, ahora necesitamos crear un lote más:
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
Nómbrelo "line_del.bat". Vea, el primer parámetro es el archivo para procesar, el segundo - cadena para buscar líneas para eliminar. Ahora modifique el lote principal (de nuevo, perdón por el formato):
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"
Ver artículos relacionados:
Comandos de programación simples en un entorno por lotes
Utilidad osql
MSSQL :¿Cómo se crea un script para la creación de procedimientos almacenados con código?
Eliminar ciertas líneas en un archivo txt a través de un archivo por lotes
:) puedes notar que los dos últimos son de SO!