比方说,我有一些更新脚本:在多个数据库(SQL Server)上运行脚本?
update sometable set somecolumn = 'somevalue' where xyz = 0
现在让我们说我有多个数据库,如DB1,DB2,DB3等。我怎么能在没有手动执行的情况下在这些脚本上运行这个脚本?
谢谢:)
比方说,我有一些更新脚本:在多个数据库(SQL Server)上运行脚本?
update sometable set somecolumn = 'somevalue' where xyz = 0
现在让我们说我有多个数据库,如DB1,DB2,DB3等。我怎么能在没有手动执行的情况下在这些脚本上运行这个脚本?
谢谢:)
如果你想所有的数据库,你可以使用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
希望有所帮助。
这也是一个不错的功能! – grady 2010-07-22 07:23:35
不建议将未记录的存储过程用于除特殊情况外的任何情况,因为它们可能会随时更改甚至删除。尽管你总是可以轻松地推出自己的产品。 – 2014-04-30 09:24:31
可以使用光标
所有服务器获取列表在你的局域网或网络
为
不是创建光标做到这一点使用sp_executesql运行更新脚本,使用forpart查询
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'
检查更新回答 – 2010-07-22 06:30:59