個人記錄
需求:當表t1 itemcode和表t2 itemname的資料相等時,將表t2所對應的id和itemname列的資料分別存入表t1 caozuo欄位的id元素和text元素的文字中。
下面用儲存過程迴圈來實現批量處理sql 資料存入xml型別資料:
createprocedure
[dbo
].[pre_xmcus]as
begin
--建立臨時表
create
table #temps (dspid uniqueidentifier
null,itemcode varchar(100) null,id uniqueidentifier
null,itemname nvarchar(100) null,rowid int
null
)
declare
@batchid
uniqueidentifier
set@batchid
=newid
()
insert
into
#temps
(dspid,itemcode,id,itemname,rowid)
select
@batchid
as dspid,t1.itemcode,t2.id,t2.itemname,row_number() over(order
by t1.itemcode)as
rowid
from
tecul_xmcus t1
inner
join tecul_sysusers t2 on t1.itemcode=t2.itemname and t2.isdelete=
0where t1.isdelete=
0and t1.caozuo is
null
--先將操作使用者欄位為null的賦值
update
t2
set t2.caozuo=
'64b2e004-1038-415b-8522-7c1a8c974572
020001
'from
tecul_xmcus t2
inner
join tecul_sysusers t3 on t2.itemcode=t3.itemname and t3.isdelete=
0where t2.isdelete=
0and t2.caozuo is
null
--獲取最大行數
declare
@maxrow
int=(select
count(*) from
#temps)
--開始迴圈
while(@maxrow
>0)
begin
begin
try
begin
tran
ifexists(select
1from #temps where dspid=
@batchid
and rowid=
@maxrow
)
begin
declare
@itemcode
varchar(20
)
select
@itemcode
=itemcode from #temps where dspid=
@batchid
and rowid=
@maxrow
ifexists(select
1from #temps where dspid=
@batchid
and rowid=
@maxrow
)
begin
declare
@aid
uniqueidentifier,@bid
nvarchar(100
)
set@aid
=(select id from #temps where itemcode=
@itemcode
and dspid=
@batchid
and rowid=
@maxrow
)
set@bid
=(select itemname from #temps where itemcode=
@itemcode
and dspid=
@batchid
and rowid=
@maxrow
)
--更新id元素文字
update
t2
set caozuo.modify('
replace value of (/caozuo/data/item/id/text())[1] with sql:variable("@aid")')
from
#temps t1
join tecul_xmcus t2 on t1.itemcode=t2.itemcode and t2.isdelete=
0where t2.itemcode=
@itemcode
and dspid=
@batchid
and rowid=
@maxrow
--更新text元素文字
update
t2
set caozuo.modify('
replace value of (/caozuo/data/item/text/text())[1] with sql:variable("@bid")')
from
#temps t1
join tecul_xmcus t2 on t1.itemcode=t2.itemcode and t2.isdelete=
0where t2.itemcode=
@itemcode
and dspid=
@batchid
and rowid=
@maxrow
endend
commit
tran
endtry
begin
catch
declare
@errormes
nvarchar(300
)
set@errormes
=error_message()
rollback
tran
endcatch
set@maxrow
=@maxrow-1
end--
select * from #temps
--drop table #temps
end
SQL 處理 XML 簡介
sql xml 入門 by jinjazz 1 xml 能認識元素 屬性和值 2 xpath 定址語言,類似windows目錄的查詢 沒用過dir命令的話就去面壁 語法格式,這些語法可以組合為條件 表示自己,表示父親,表示兒子,表示後代,name 表示按名字查詢,name 表示按屬性查詢 集合 條件...
SQL批量處理方法總結
sql中常用的批量處理可以通過事務 迴圈語句 批量處理語句以及儲存過程等方式實現,比較常用而且簡單是事務 迴圈語句和批量處理語句,下面重點介紹!1 事務 程式中批量執行sql語句時可以通過事務保證執行任務的完整性!例項 如下 2 迴圈語句 sql中的迴圈語句可以實現有規律資料的批量處理,比如在vc ...
SQL批量插入資料
select frompersonsp 批量插入 insert intopersonsvalues bx9 z 上海 松江 2 bx1 z 上海 松江 2 bx2 z 上海 松江 2 bx3 z 上海 松江 2 bx4 z 上海 松江 2 bx5 z 上海 松江 2 bx6 z 上海 松江 2 bx...