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

2024-02-04

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

我已经从 devio IT 找到了 SMOscript,但它会收集所有表和存储过程,这需要一些时间。是否有任何类似的工具可以定义要导出的存储过程?我也错过了USE <DB>与手动导出为脚本存储过程相比,SMOScript 不会添加到导出文件的子句CREATE.


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

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!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过批处理将 SQL 存储过程保存到 .sql 文件 的相关文章

  • 使用 MS Access 获取行的第一个实例

    EDITED 我有这个查询 我想SELECT表中记录的第一个实例petTable SELECT id pet ID FIRST petName First Description FROM petTable GROUP BY pet ID
  • 使用Powershell访问远程Oracle数据库

    我需要能够连接到我的网络上基于 Windows 7 的 Oracle 服务器 32 位 Oracle XE 我需要连接的机器运行 Windows 7 64 位 两台机器上都安装了 Powershell 我已在 64 位计算机上安装了 Ora
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • 使用两个日期之间的随机日期时间更新每一行

    我有一个专栏叫date created我希望每一行保存一个随机日期 日期距当前时间为 2 天 我正在运行以下查询 但它会更新具有相同随机日期的所有行 我希望每一行都是随机的并且不相同 update table set date create
  • 复选框上的数据绑定

    我目前正在将数据从 SQL 数据库之一提取到我的应用程序中 我可以让它适用于我的文本框和其他项目 但是 我似乎无法让它适用于复选框 这是我正在使用的代码 DataTable dt new DataTable dt using SqlConn
  • 更改迁移中的自动​​增量值(PostgreSQL 和 SQLite3)

    我有一个托管在 Heroku 上的项目 想要更改表的自动增量起始值 我在本地使用 SQLite3 Heroku 使用 PostgreSQL 这是我在迁移中所拥有的 class CreateMytable lt ActiveRecord Mi
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 存储过程和权限 - EXECUTE 就足够了吗?

    我有一个 SQL Server 2008 数据库 其中对基础表的所有访问都是通过存储过程完成的 一些存储过程只是从表中选择记录 而其他存储过程则进行 UPDATE INSERT 和 DELETE 如果存储过程更新表 执行存储过程的用户是否也
  • MySQL 按重复项从上到下排序

    我有一个lammer问题 因为我不是mysql专业人士 我有类似的字段 id color 1 red 2 green 3 yellow 4 green 5 green 6 red 我想按重复项进行分组 最常见的重复项先进行分组 所以应该这样
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • 如何在 SQL Server 存储过程中对用户定义的表类型执行 ForEach?

    XX PROCEDURE dbo XXX X dbo IntType readonly AS BEGIN SET NOCOUNT ON how can I foreach X here and do process individually
  • 为什么我可以像调用实例方法一样调用类方法?

    我正在查看这个例子 class SQLObject def self columns return columns if columns columns DBConnection execute2 lt lt SQL first SELEC
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 执行带有 EXCEPTION 的 PostgreSQL 查询会导致两条不同的错误消息

    我有一个 PostgreSQL 查询 其中包含事务和列重复时的异常 BEGIN ALTER TABLE public cars ADD COLUMN top speed text EXCEPTION WHEN duplicate colum
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • 在 postgres 查询中使用列表

    我有一个动态列表 list a b c d 所以长度可能会改变 我想在查询中比较这些列表值 select from student where name in all the list values 我想将列表值传递到此查询中 我怎样才能做
  • SQL - != 'NULL' 的解释

    我的SSMS代码如下 Select top 50 From FilteredContact Where statuscode 1 and emailaddress1 NULL and telephone1 NULL and address1
  • 如何获得顶部带有千位分隔符的数字?

    SELECT count FROM table A 假设结果是8689 我怎样才能将它转换为8 689在 SQL Server 上 尝试这样 select replace convert varchar convert Money coun
  • 索引数量越少意味着插入、更新和删除速度更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 postgres 和 node js 在单个语句中执行多个查询

    我需要在像这样的单个语句中执行插入和删除查询 INSERT INTO COMPANY ID NAME VALUES 1 Paul DELETE FROM COMPANY WHERE ID 12 这是我用于执行查询的 node js 代码 p

随机推荐

  • uvicorn 在 AWS Fargate 上 1-2 分钟后关闭

    我在 AWS Fargate 上使用 Python 3 10 1 和应用程序负载均衡器部署了 FastAPI 0 81 0 uvicorn 0 18 3 服务器在我的本地 Docker 中无限期地运行 如预期 但是在 AWS 上 应用程序总
  • 如何在 Laravel 5 中导入 symfony 进程类?

    我想知道如何在 laravel 5 中导入 symfony 进程类 我在 laravel 的控制台中使用了它 但显示错误 未找到 进程 类 use Symfony Component Process Process 这样你就可以使用 Pro
  • Java 对象序列化性能技巧

    我必须将一棵巨大的对象树 7 000 个 序列化到磁盘中 最初 我们用 Kodo 将这棵树保存在数据库中 但它会进行成千上万的查询才能将这棵树加载到内存中 并且会占用本地宇宙可用时间的很大一部分 我为此尝试了序列化 并且确实获得了性能改进
  • 将 Json 对象导出到文本文件

    我正在尝试编写一个 Json 对象 JsonExport 并且想将其内容写入文本文件 我正在使用 max4live 将数据从 Audio DAW 导出到 Json 以便导出到服务器 但之后我希望在文本文件中看到整个 Json 对象 var
  • 如何仅使用日期从 DATETIME 列中进行选择?

    我的表上有一个 DATETIME 列 用于存储创建记录的时间 我只想选择在特定日期创建的记录 如果我尝试 SELECT FROM myTable WHERE postedOn 2012 06 06 即使表中有很多行 它也不返回任何行post
  • 我们如何在 Angular 4 中获取 HttpClient 状态代码

    嗨 Angular 新手 我面临着获取 HTTP 状态代码的问题 该代码位于 HTTP 模块中 我可以使用轻松获取响应代码响应状态 但是当我使用HttpClient模块我无法获取response status 它显示找不到状态 那么 我怎样
  • C:负数和余数背后的数学

    这似乎是处理 Remainder Mod 时被问到的第一件事 而我对此有点碰壁 我正在用一本教科书和一堆 C 代码自学编程 鉴于我没有真正的教练说 不 不 它实际上是这样工作的 我想我应该在这里尝试一下 不过 我还没有找到数学部分的结论性答
  • 如何在 clojure 中创建可执行文件?

    我一直在使用 Clojure Box 在 REPL 环境中学习 clojure 如何制作可执行文件 jar 我想知道这样的事情是否可能 在记事本上编写 clojure 代码并将其命名为project clj 编译项目 clj 获取可执行文件
  • 构建此 Linq-to-Events 拖放代码的最佳方法是什么?

    我正在尝试处理拖放交互 其中涉及鼠标按下 鼠标移动和鼠标向上 这是我的解决方案的简化重现 按下鼠标时 创建一个椭圆并将其添加到画布上 鼠标移动时 重新定位椭圆以跟随鼠标 鼠标松开时 会更改画布的颜色 以便清楚地看出您正在拖动哪一个 var
  • 如何克服 grails 服务中的 StaleObjectStateException

    我引入了一个 TransactionService 我在控制器中使用它来执行乐观事务 它应该 尝试执行给定的事务 关闭 如果失败则回滚 如果失败再试一次 它基本上看起来像这样 class TransactionService transac
  • 哪些 Spark 转换会导致 Shuffle?

    我很难在 Spark 文档中找到导致随机播放的操作和不会导致随机播放的操作 在这个列表中 哪些会导致洗牌 哪些不会 映射和过滤器则不然 但是 我不确定其他人的情况 map func filter func flatMap func mapP
  • 将 SimpleDateFormat 转换为 DateTimeFormatter

    因此 当尝试使用 SimpleDateFormat 和 Date 替换一些遗留代码以使用 java time DateTimeFormatter 和 LocalDate 时 我遇到了问题 这两种日期格式不等效 在这一点上 我必须说我知道这两
  • 生成产品激活序列号

    首先 这不是为其他产品生成序列号的问题 我是not寻求 破解 其他产品 这是我的要求 我想生成一个标准的序列号 AILU7 ABCDE 54321 1234 AFCK 17UDF 我需要一些过程来验证该序列号是否 有效 这部分确实not必须
  • 在 Laravel 中更新数据库的多行

    我想要一个用于更新多行数据库的代码 如下所示 UPDATE values SET data options male female default male where project id 1 and id 1 UPDATE values
  • 设计新的 Twitter 小部件(嵌入时间线)

    几天 几周前 我的一些网站的 Twitter 小部件停止正确提取数据 事实证明 版本 2 的 Twitter 小部件已被弃用 显然 新的嵌入式时间轴小部件是唯一的出路 https dev twitter com blog planning
  • oracle apex 值列表 - 选择值并在下一个字段的 SQL 查询中使用

    我将 Apex 4 0 2 与 Oracle XE 11 结合使用 我有一个表格 上面有一个字段 P200 CARD TYPE 是从值列表中设置的 我想要发生的是使用我在设置 仅显示 字段的查询中选择的值 P200 DESC 在源代码部分中
  • 在for循环中声明两个变量

    是否可以在 for 循环的初始化部分声明两个变量 我想对字符串的每个字符调用一个函数 for var i 0 c aString charAt i i lt aString length i problem here not itterat
  • 使用 javascript 区分表单中的两个提交按钮

    我怎样才能知道在javascript中点击了哪个提交按钮 function submitForm if find open popup else if add continue in the same window
  • 骆驼模拟 - MockEndpoint.whenAnyExchangeReceived 处理方法不执行

    我下面有示例代码 为什么 MockEndpoint whenAnyExchangeReceived 中的 process 方法没有执行 我期望响应是 来自模拟远程 http 调用的预期正文 但实际响应是请求中传递的内容 Camelrocks
  • 如何通过批处理将 SQL 存储过程保存到 .sql 文件

    我想将我的 MS SQL Server 2005 存储过程自动保存到 sql 文件 更喜欢可以通过 bat 调用的工具 这样我就不必手动单击每个存储过程并保存它 我已经从 devio IT 找到了 SMOscript 但它会收集所有表和存储