如圖:一個多表聯合查詢的dw
當我們在界面中對該dw的信息進行修改並想保存的時候,突然發現dw的update功能中只能對其中一個表進行更新。如圖:
這讓人非常的苦惱。雖然可以通過後臺代碼進行表的操作和更新。但是總覺得這種方法太繁瑣。而且似乎不是正途。於是研究了一下是否可以通過存儲過程進行多表的更新呢。如圖:
pb的dw更新功能中有通過存儲過程進行更新的選項。於是在SQL中寫存儲過程本人用的是SQL2000比較落後。如圖:
存儲過程內容如下:
CREATE PROCEDURE [dbo].[threeTupdate]
@cardno varchar(50),
@zdr int,
@dqfqbz int,
@kzsfzid int,
@yxq datetime,
@dqhke int,
@mm varchar(50),
@yhid int,
@xlk int,
@xz bit,
@byhkts int,
@fkje int,
@kzsfz varchar(50),
@kzxm varchar(50),
@kztel varchar(11),
@zjrid int,
@kzsxfbl float,
@zjsfz varchar(50),
@zjxm varchar(50),
@zjtel varchar(11),
@zjsxfbl float
AS
begin
update info_card set zdr = @zdr, dqfqbz = @dqfqbz, kzsfz = @kzsfzid, yxq = @yxq, dqhke = @dqhke, mm = @mm, yhid = @yhid, xlk = @xlk, xz = @xz, byhkts = @byhkts, fkje = @fkje where cardno = @cardno
update info_kz set sfz = @kzsfz, xm = @kzxm, tel = @kztel, zjrid = @zjrid, sxfbl = @kzsxfbl where id = @kzsfzid
update info_zj set sfz = @zjsfz, xm = @zjxm, tel = @zjtel, sxfbl = @zjsxfbl where id = @zjrid
end
GO
存儲過程中聲明的參數與dw中所有的列對應(三個表的列都包含在其中),而後用update語句分別更新三個表。這裏不需要理會dw中到底有多少行,不用我們去循環判斷哪一行有更新哪一行沒有更新,dw的更新機制會自行判斷。存儲過程寫好後,在dw的存儲過程更新界面中引入update存儲過程。並將每一行與每一個存儲過程參數相對應後保存即可。