当前位置:  开发笔记 > 编程语言 > 正文

如何通过批处理将SQL存储过程保存到.sql文件中

如何解决《如何通过批处理将SQL存储过程保存到.sql文件中》经验,为你挑选了1个好方法。

我想将我的MS SQL Server 2005存储过程自动保存到.sql文件(更喜欢我可以通过.bat调用的工具)所以我不必手动点击每个sproc并保存它.

我已经从devio IT中找到了SMOscript,但它收集了所有需要一些时间的表和sproc.有没有类似的工具,我可以定义哪些sproc(s)导出?此外,我错过了USE子句,其中SMOScript不会添加到导出文件,与手动导出为CREATE的脚本sproc相反.

最好的问候肖恩



1> Maksym Gonta..:

使用脚本创建批处理文件(抱歉格式化,但它确实应该内联执行批处理):

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".现在,执行批处理使用params:
run.bat [username] [password] [servername] [database]
示例:
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".看,第一个参数是要处理的文件,第二个 - 用于搜索要删除的行的字符串.现在修改主批次(再次,抱歉格式化):

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!

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有