用事務實現函式效果

2022-09-15 07:03:13 字數 3799 閱讀 1184

--事務xml控制

--用事務/xml實現函式效果

create

table

ta(id int

,name

varchar

(50))

insert

taselect

1,'a'

union all

select

1,'b'

union all

select

1,'a'

union all

select

2,'e'

union all

select

2,'f'

union all

select

3,'g'

union all

select

3,'h'

union all

select

3,'i'

union all

select

3,'j'

union all

select

4,'k'

union all

select

4,'m'

union all

select

4,'l'

union all

select

5,'a'

union all

select

5,'b'

union all

select

5,'c'

union all

select

5,'d'

union all

select

5,'e'

union all

select

6,'f'

union all

select

6,'g'

union all

select

6,'h'

union all

select

6,'k'

union all

select

6,'m'

--合併效果

/*id

name

----------- ----------1a

,b,a

2e,f3g

,h,i,j

4k,m,l5a

,b,c,d,e6f

,g,h,k,m

(6 個資料列受到影響)*/

--方法

1(不用函式實現更新、查詢

) 如下用於幾列合併一列方法

1比方法

2效率高

declare

@tb table

(id int

,name

varchar

(50),

con int

identity(1,

1))insert

@tbselect

*from

tabegin

tran

while

exists(

select

1 from

@tb)

begin

update

aset

a.name=

a.name+

','+

b.name

from

ta a ,

@tb b

where

a.id=

b.id

andnot

exists(

select

*from

@tb where

id=b.id

and con<

b.con )

delete

bfrom

@tb b where

notexists(

select

1 from

@tb where

id=b.id

and con<

b.con)

endselect

distinct

id,顯示=

stuff

(name,1,

charindex

(','

,name

),''

)from

ta--

以下用於更新

commit tran

替換rollback tran

--update ta set

name=stuff(name,1,charindex(',',name),'')

--commit tran

rollback

tran

select

*from

ta--

方法2(

通過建立函式實現查詢更新、查詢

)create

function

ta_fun(

@id int

)returns

varchar

(1000)

asbegin

declare

@sql varchar

(1000)

set @sql=

''select

@sql=

@sql+

','+

name

from

ta where

id=@id--print @sql

return

stuff

(@sql,

1,1,'')

endselect

distinct

id,顯示=

dbo.

ta_fun(

id)from

ta --select id,

顯示=dbo.ta_fun(id) from ta group by id

--以下用函式更新

update

ta set

name

=dbo.

ta_fun(

id)--drop table ta

刪測試表

--drop function ta_fun

刪測試函式

--以下用

sql2005

實現方法

--xml方法1

select

*from

(select

distinct

id from

ta )

aouter

(select

[name]=

stuff

(replace

(replace

((select

name

from

ta n where

id =

a.id for

xmlauto

),',

','),

'"/>',''

), 1,

1,''))n

--xml方法2

select

id, [name]=

stuff

((select

','+

name

from

ta where

id=a.id for

xmlpath(''

)),1,

1,''

)from

ta a

group

by id

PHP中使用事務例項

pdo和mysql的寫法不一樣,處理方式一樣 dbhost localhost 3306 mysql伺服器主機位址 dbuser root mysql使用者名稱 dbpass 123456 mysql使用者名稱密碼 conn mysqli connect dbhost,dbuser,dbpass i...

Javaweb 事務實現

為什麼需要事務 需要 有一張銀行賬戶表,a使用者給b使用者轉賬 a賬戶減少,b賬戶增加,但是a操作完之後斷電了?解決方案 a減少錢,但是不要立即修改資料表,b收到錢之後,同時修改資料表 什麼是事務 事務 transaction,一串行要發生的連續的操作。事務的特點 連續的操作要麼全部成功,要麼全部失...

Spring事務實現方式

1.一種是使用xml實現事務 開發基本不用 transactional的所有可選屬性 propagation 用於設定事務傳播屬性。該屬性型別為 propagation 列舉,預設值為 propagation.required。isolation 用於設定事務的隔離級別。該屬性型別為 isolati...