Sql server SQL Server,在多个数据库上执行批处理T-SQL脚本
我们的SQLServer2000实例承载着几个相似的数据库,每个数据库对应于我们的客户机。当需要全部更新它们时,我们使用RedGateSqlCompare在开发数据库和所有客户机数据库的当前状态数据库副本之间生成迁移脚本 SQL Compare生成一个事务性脚本,如果一个步骤失败,该脚本将回滚所有内容。但目前我们的系统使用一种方法,在批处理分隔符(GO语句)上拆分脚本,然后分别运行每个命令,这会破坏所有事务性内容。通过编程查询数据库时不支持GO语句(在经典ASP中)Sql server SQL Server,在多个数据库上执行批处理T-SQL脚本,sql-server,batch-file,automation,sql-server-2000,sqlcompare,Sql Server,Batch File,Automation,Sql Server 2000,Sqlcompare,我们的SQLServer2000实例承载着几个相似的数据库,每个数据库对应于我们的客户机。当需要全部更新它们时,我们使用RedGateSqlCompare在开发数据库和所有客户机数据库的当前状态数据库副本之间生成迁移脚本 SQL Compare生成一个事务性脚本,如果一个步骤失败,该脚本将回滚所有内容。但目前我们的系统使用一种方法,在批处理分隔符(GO语句)上拆分脚本,然后分别运行每个命令,这会破坏所有事务性内容。通过编程查询数据库时不支持GO语句(在经典ASP中) 我想知道如何在所有这些数据库
我想知道如何在所有这些数据库(比如250db)上以编程方式或在工具中手动运行该脚本(保留事务)?在查询分析器中,我们需要选择每个数据库并按Run,这对于我们拥有的数据库数量来说是相当长的。不确定这是否有效,但尝试用分号替换GO语句,并在一批中运行整个语句。我使用external。我在我工作的服务器上也有同样的情况 我在*.sql文件中有脚本,在第二个文件中有数据库列表。我有一个小的*.bat脚本,它遍历所有数据库,并使用sqlcmd命令执行脚本 在更多细节方面,我有如下内容:
sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -d <database_name> -T
- DB.ini文件,其中包含要在其上部署脚本的所有数据库
- sql/存储所有脚本的目录
- runIt.bat—部署脚本的脚本
sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -d <database_name> -T
sqlcmd-S \-i-d-T
在SQLServer2000中,它是
更新
RedGate现在有一个名为的工具,它基本上可以实现您想要的功能。我支持SQL 2000到2008 R2,并在多个数据库上并行运行查询,从而提高性能。如果您可以使用SQL 2005或2008中的SSM,那么我建议使用免费的如果我记得的话,您还可以在SQL Compare中创建一个脚本,将所有内容更改回它开始时的状态。您可能希望同时生成这两个
当我进行这种部署时(已经有一段时间了),我首先加载到一个与prod完全相同的临时服务器上,然后才开始确保脚本在prod上工作。如果出现任何问题(通常是由于脚本的运行顺序,例如,无法为尚不存在的表设置外键)。我还先编写了al表更改的脚本,然后是所有视图更改,然后是所有UDF更改,最后是所有存储过程更改。这大大减少了由于对象尚不存在而导致的故障,但我通常仍有一些需要调整。7年后,我多次遇到相同的问题,因此我制作了该项目并发表了该项目: TAKODEPLOY 以下是一些功能:
- 从单个实例获取所有数据库并应用名称筛选器。或者只是一个单一的直接连接
- 尽可能多地混合数据库源。例如,两个直接实例和一个完整实例(带或不带筛选器)
- 脚本编辑器(Avalon文本,与monodevelop使用相同)
- 脚本在执行之前被解析并检测到错误
- 脚本由GO语句“拆分”
- 将部署保存到文件中
- 在部署之前获取所有数据库的列表
- 实时查看正在发生的事情(此处建议使用打印语句!)
- 如果发生任何错误,自动回滚到独立数据库
- 通过Squirrel进行透明更新
您可以在以下位置获得它:您发送的链接是针对SQL Server 2008的,SQL Server 2000中是否也提供了此命令行工具?我更新了我的答案。在SQL Server 2000中,该工具称为osql。*.bat文件看起来像什么解释不完整。如何读取DB.ini文件?bat文件是什么样子的?无论如何,要用多个实例和变量以自动化的方式实现这一点吗?有人有完整的剧本吗?