情況:多台資料庫伺服器,每台伺服器多個資料庫,資料庫結構一致(提供給不同客戶使用)
一、手工操作
1、資料庫少
下拉列表選擇不同資料庫,執行更新指令碼sql.資料庫少,操作感覺不到麻煩。
2、資料庫多
下拉列表選擇不同資料庫,操作麻煩,容易遺漏更新資料庫。
sql server management studio這個下拉列表,還不支援拉大縮小,資料庫多了去選擇不同資料庫相當夠嗆。
二、半自動
思路:先更新乙個資料庫(newnew),比如更新了儲存過程addsaleorder和deletesaleorder, 和執行一段sql(delete from dbo.systemconfig where configname='a'),然後通過sql參照這個資料庫更新同台伺服器的其他資料庫。
use [newnew]
declare @name sysname
declare userdb cursor for select name from master.dbo.sysdatabases where sid <> 0x01
open userdb
fetch next from userdb into @name
while (@@fetch_status = 0)
begin
exec('use [' + @name + '] if (exists(select 1 from dbo.sysobjects o where o.name = ''customer'' and o.xtype = ''u'')) begin print ''' + @name + ''' end')
fetch next from userdb into @name
endclose userdb
deallocate userdb
假如輸出:
db1db2
db3獲取一台伺服器上的所有自定義資料庫,select name from master.dbo.sysdatabases where sid <> 0x01
通過游標再次再次過濾需要的自定義資料庫(乙個特殊的物件,比如:customer表)
生成批量更新資料庫的指令碼:
use [newnew]
declare @objectid int
declare @objectname sysname
declare @objecttype char(2)
declare @text varchar(max)
declare @dbname sysname
declare getname cursor scroll for select name from master.dbo.sysdatabases where sid <> 0x01 and name in ('db1' ,'db2' ,'db3')
open getname
declare getobj cursor for select o.id, o.[name], o.xtype from dbo.sysobjects o where o.name in ('addsaleorder' ,'deletesaleorder') and o.xtype in ('p', 'fn', 'v')
open getobj
fetch next from getobj into @objectid, @objectname, @objecttype
while (@@fetch_status = 0)
begin
set @text = ''
select @text = @text + s.[text] from dbo.syscomments s where s.id = @objectid
fetch first from getname into @dbname
while (@@fetch_status = 0)
begin
if (@dbname = 'db1')
use [db1]
else if (@dbname = 'db2')
use [db2]
else if (@dbname = 'db3')
use [db3]
if (exists(select 1 from dbo.sysobjects o where o.name = @objectname and o.xtype = @objecttype))
begin
if (@objecttype = 'p')
exec ('drop procedure dbo.' + @objectname)
else if(@objecttype = 'v')
exec ('drop view dbo.' + @objectname)
else if(@objecttype = 'fn')
exec ('drop function dbo.' + @objectname)
endexec (@text)
exec ('delete from dbo.systemconfig where configname=''a''')
use [newnew]
fetch next from getname into @dbname
endfetch next from getobj into @objectid, @objectname, @objecttype
endclose getobj
deallocate getobj
close getname
deallocate getname
dbo.syscomments儲存的儲存過程指令碼,如果指令碼字元超過4000字元,會多行儲存。@text = @text + s.[text]累加得到指令碼,沒個物件更新時set @text = '',清除
輔助winform:
3、自動
向大家請教了。。。
批量更新資料庫
前言 最近做了個專案 把txt檔案中的資源資訊全量更新到資料庫中,拿到這個專案後,我首先考慮到效能問題應該是個大問題,於是想到了用批處理解決,但是批處理不能支援事物回滾,且只能一條一條sql執行,效率雖然比直接更新資料庫要快,且不占用cpu。經諮詢有一種更好的方法,就是先用c 自帶提供的方法sqlb...
資料庫學習 update(批量更新)
資料更新update命令 用指定要求的值更新指定表中滿足天劍的資料的指定列的值 語法形式 update 表名 set 列名 表示式 子查詢 列名 表示式 子查詢 where 條件表示式 示例 1 將所有教師工資上調 10 原表資料 執行兩次後結果 2 將所有計算機學院的老師工資上調 10 updat...
C 批量更新sql server資料庫資料
批量更新有兩種策略 第一種方式 拼接所有更新字串,在資料庫一次性執行,這樣減少資料更新時頻繁的連線斷開資料庫。第二種方式 把要更新的資料寫入資料庫全域性臨時表,然後利用sql語句更新,最後把原表中不存在的資料獲取到再批量寫入。以下是第二種方式的實現。該方式中有投機取巧的嫌疑,但是確實能對在單機大批量...