批量處理sql 資料存入xml型別列

2022-05-14 02:35:41 字數 3582 閱讀 9797

個人記錄

需求:當表t1 itemcode和表t2 itemname的資料相等時,將表t2所對應的id和itemname列的資料分別存入表t1 caozuo欄位的id元素和text元素的文字中。

下面用儲存過程迴圈來實現批量處理sql 資料存入xml型別資料:

create

procedure

[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...