寫出這個procedure ,是因為不想要再用c#寫一支程式

想說直接在procedure中直接寫這個批次匯入的動作就好了

整個的需要是要,取A資料表的最大號的key,並+1後要再連同其他的欄位的B的資料

一起新增到A,看起來有點怪,不過一般要這樣做的話,可能會是在程式中做transaction

但這樣就又很麻煩,於是想說直接寫procedure做就好,本以為會很難,不過這個procedure寫起來且成功後,想說記錄下來,以後就有個參考

以下為procedure 的code,另外有關於以下的code中的一些觀念,例如fetch、begin tran、cursor這些請先在網路上看看再來看code會比較了解我在寫啥

或者也可以參考我之前寫的文章--

在storedprocedure中使用類似程式的for迴圈用法

------------------------------------------------------------------------------------------

Create proc [dbo].[TestProcedure]
as
SET NOCOUNT ON;
 begin tran
declare test cursor
for select  venno from btable   --將要準備要匯入的資料表先select出來,假設有10筆,那待會就會跑迴圈10次

open test
declare @venno varchar(20)
declare @uid varchar(20)
declare @i int
declare @maxuid int
select @maxuid=max(cast(right(uid,5) as int)) from atable   --取目的地目前的最大號
set @i=0

fetch next from test
into @venno
while(@@fetch_status=0)
begin 

 set @i=@i+1
 set @uid=replace(left(convert(varchar,getdate(),111),7),'/','')+dbo.padleft(@maxuid+@i,'0',5)

insert atable (uid,,owner)
select @uid,'testuser' from atable  where
venno=@venno

 if @@error>0
  goto needroback

 fetch next from test  into @venno 
end

needroback:
 if @@error>0
  rollback tran
 else
  commit tran

close test
deallocate tes
t

丫德 發表在 痞客邦 PIXNET 留言(0) 人氣()