Sql server 我可以同时对多个数据库应用update语句吗?
假设我要运行以下操作:Sql server 我可以同时对多个数据库应用update语句吗?,sql-server,Sql Server,假设我要运行以下操作: update users set age = 10 关于数据库: db1, db2, db3 在同一台服务器上,我希望循环并执行相同的操作 目前,我正在通过下拉菜单使用ManagementStudio手动执行此操作 希望有更好的方法。不确定是否“动态”执行,即在服务器中的所有数据库上执行FOR-EACH样式的循环,但这应该可以: USE db1 update users set age = 10 GO USE db2 update users set a
update users set age = 10
关于数据库:
db1, db2, db3
在同一台服务器上,我希望循环并执行相同的操作
目前,我正在通过下拉菜单使用ManagementStudio手动执行此操作
希望有更好的方法。不确定是否“动态”执行,即在服务器中的所有数据库上执行FOR-EACH样式的循环,但这应该可以:
USE db1
update users set age = 10
GO
USE db2
update users set age = 10
GO
USE db3
update users set age = 10
将一台服务器指定为中央管理服务器,然后将其他服务器添加到服务器组。然后,您可以在组内的所有数据库上运行更新 您可能可以使用动态SQL来实现这一点。大概是这样的:
create table #dbs (db_name sysname not null)
insert into #dbs values ('db1'),('db2'),('db3')
declare curs cursor for
select db_name from #dbs
declare @db sysname, @sql nvarchar(max)
open curs
while(1=1)
begin
fetch next from curs into @db
if (@@fetch_status <> 0)
break
set @sql = 'update ' + quotename(@db) + '.dbo.users set age = 10'
exec(@sql)
end
close curs
deallocate curs
drop table #dbs
您正在使用哪个版本的SQL server?这属于数据库管理员SE。呵呵,好的想法是有一个循环,这是重复的脚本,我想避免维护的原因,但谢谢!这将允许您在多个服务器上运行语句,但不能在多个数据库上运行语句。多个服务器=多个数据库:每个服务器上的数据库需要命名相同,但如果它们是相同的,则这是要使用的解决方案。这是我发现的有选择地更新多个数据库的最佳/最安全的方法。
use [WWAUTHxxx__] -- a db containing active databases.
set nocount on
declare @Catalog as nvarchar(32)
declare @LibraryName as varchar(255)
declare @dbtable as varchar(50)
declare @retval as nvarchar(50)
declare @sSQL as nvarchar(max)
declare @parmdef as nvarchar(500)
declare @retvalout as nvarchar(50)
Declare Library_Cursor Cursor for
select top(1000) xCatalog, xLibraryName
from Active_DBs
order by xcatalog
Open Library_Cursor;
Fetch Next from Library_Cursor into @Catalog, @LibraryName
while @@Fetch_status = 0
begin
set @dbTable = @Catalog + '.dbo.las_circperiods'
set @ParmDef = N'@retvalOUT int OUTPUT';
set @sSQL = N'Select @retvalout = count(*) from ' + @dbtable
+ ' where xlastcircdate is null'
exec sp_executesql @ssql,@parmdef,@retvalout=@retval output
if @retval > 0 -- check/print Sql and then activate.
-- I like checking to see the potentially affected databases.
begin
print @Catalog + ',' + @LibraryName + ',' + @retval
set @ssql = N'update ' + @dbTable
+ ' set xlastcircdate = '''' '
+ ' where xlastcircdate is null'
-- print @ssql -- View what you might will do
exec sp_executesql @ssql -- Do it.
end
Fetch Next from Library_Cursor into @Catalog, @LibraryName
end;
close Library_cursor
Deallocate Library_cursor