假设我有一些更新脚本:
update sometable set somecolumn = 'somevalue' where xyz = 0
现在假设我有多个数据库,如DB1,DB2,DB3等。如果不手动操作,我怎么能在所有这些脚本上运行这个脚本?
谢谢:)
答案 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
:
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
希望有所帮助。