在多个DB(SQL Server)上运行脚本?

时间:2010-07-22 06:15:17

标签: sql sql-server

假设我有一些更新脚本:

update sometable set somecolumn = 'somevalue' where xyz = 0

现在假设我有多个数据库,如DB1,DB2,DB3等。如果不手动操作,我怎么能在所有这些脚本上运行这个脚本?

谢谢:)

2 个答案:

答案 0 :(得分:2)

您可以使用光标

执行此操作
  • 获取局域网或网络中所有服务器的列表

  • 为该

  • 创建游标
  • 比使用sp_executesql运行使用forpart查询更新脚本<​​/ p>

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE [sp_cross_db_query]
    @SQLQuery varchar(400)
    AS
    
    DECLARE @DB_Name varchar(100)
    DECLARE database_cursor CURSOR FOR 
    
    SELECT DatabaseName 
    FROM Management.dbo.Customers
    
    OPEN database_cursor
    
    FETCH NEXT FROM database_cursor INTO @DB_Name
    
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
        exec(
            'USE [' + @DB_Name + '];' +
            @SQLQuery
            )
           FETCH NEXT FROM database_cursor INTO @DB_Name 
    END
    CLOSE database_cursor 
    DEALLOCATE database_cursor
    

    运行查询

      exec sp_cross_db_query 'SELECT count(*) FROM Products'
    

答案 1 :(得分:1)

如果您想要所有数据库,可以使用sp_MSforeachdb

  

http://www.databasejournal.com/features/mssql/article.php/3441031/SQL-Server-Undocumented-Stored-Procedures-spMSforeachtable-and-spMSforeachdb.htm

EXEC sp_MSforeachdb @command1="UPDATE ?..sometable SET somecolumn='somevalue' WHERE xyz=0"

或者对于特定的数据库,您可以尝试一些逻辑,如下所示:

  

http://www.sqlservercurry.com/2009/04/6-common-uses-of-undocumented-stored.html

希望有所帮助。