使用脚本创建批处理文件(对格式感到抱歉,但它确实应该内联执行批处理):
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 中,然后一一存储在单独的脚本文件中。唯一的问题 - 每个脚本的最后一行带有结果计数 - 我正在处理它:)
edited:修复了查询中的错误
删除“受影响的行”行
好的,现在我们需要再创建一批:
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
将其命名为“line_del.bat”。请参阅,第一个参数是要处理的文件,第二个参数是用于搜索要删除的行的字符串。现在修改主批次(再次,对格式感到抱歉):
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"
参见相关文章:
批处理环境中的简单编程命令 http://www.aumha.org/a/batches.php
osql 实用程序 http://msdn.microsoft.com/en-us/library/aa214012(SQL.80).aspx
MSSQL:如何使用代码编写存储过程创建脚本? https://stackoverflow.com/questions/513158/mssql-how-do-you-script-stored-procedure-creation-with-code
通过批处理文件删除txt文件中的某些行 https://stackoverflow.com/questions/418916/delete-certain-lines-in-a-txt-file-via-a-batch-file
:) 你可能会注意到,最后两个来自SO!