sqlserver 儲存過程
這段時間接觸了2個新的資料庫db2根sqlserver 其中業務涉及到把db2的資料轉到sqlserver裡面來,這部分用java程式碼搞得,然後把轉過來的資料 轉到新的系統中來,這部分用到了儲存過程,以前沒接觸過這個東西,正好整理下
ALTER PROCEDURE [dbo].[sp_import_product]
@in_plan_code varchar(100),
@result int output
AS
BEGIN
SET NOCOUNT ON; --不返回計數,提高效能
declare @plan_count int,
@newsis_plan_count int,
@error_sum int--定義統計錯誤sql,如果有則回滾
--開啟事務
begin transaction
select @plan_count=count(1) from choa1sis.dbo.lldpa ll,choa1sis.dbo.nladpa nl where ll.paplan=nl.plancode and ltrim(rtrim(plancode)) [email protected]_plan_code;
select @newsis_plan_count=count(1) from dbo.t_plan_info where ltrim(rtrim(plan_code))[email protected]_plan_code;
begin
delete from dbo.t_plan_info where plan_code = @in_plan_code;
--匯入plan info
insert into dbo.t_plan_info(plan_code,plan_name,min_age,max_age,pay_up_type,pay_up_year,policy_type,policy_year,vpu,draw_flag)
select ltrim(rtrim(paplan)) as plancode,ltrim(rtrim(nl.planname)) as planname,paloage,pahiage,
case papupuse when 'D' then 'Y' else papupuse end as pay_up_type,papayup,
case pamxuse when 'D' then 'Y' else pamxuse end as policy_type,pamx,CAST(pavpu as varchar(10)) as vpu,'0'
from choa1sis.dbo.lldpa ll,choa1sis.dbo.nladpa nl where ll.paplan=nl.plancode and ll.paco=nl.planco
and ll.paco in('0986')
and ltrim(rtrim(ll.paplan)) [email protected]_plan_code;
set @error_sum += @@error
end
declare @premium_change varchar(10);
select @premium_change=paprmchg from choa1sis.dbo.lldpa ll where ll.paco='0986' and ltrim(rtrim(ll.paplan)) [email protected]_plan_code;
if @premium_change in('A','B','C','D','E','N')
begin--對應t_premium_rate,資料可以直接匯入
delete from dbo.t_premium_rate_ext where plan_code = @in_plan_code;
insert into dbo.t_premium_rate_ext(plan_code,gender,occupation_level,age,appu,max_limit,rate)
select ltrim(rtrim(pzplan)), pzsex , pzbnd , pzage ,
CAST(pzappu as varchar(10)), CAST(pzlimit1 as varchar(10)) ,CAST(pzap1 as varchar(10))
from choa1sis.dbo.ladpz
where pzco='0986' and ltrim(rtrim(pzplan)) [email protected]_plan_code;
set @error_sum += @@error
end
else if @premium_change in('1','Y')
begin--對應t_premium_rate,資料要轉換
delete from dbo.t_premium_rate where plan_code = @in_plan_code;
insert into dbo.t_premium_rate(company_code,plan_code,gender,occupation_level,age,rate)
select pcco,ltrim(rtrim(pcplan)) , pcsex , pcbnd , pcage , CAST(PCCHG1 as varchar(10))
from choa1sis.dbo.lldpc;
set @error_sum += @@error
end
else
begin--對應t_premium_rate,資料可以直接匯入
delete from dbo.t_premium_rate where plan_code = @in_plan_code;
insert into dbo.t_premium_rate(company_code,plan_code,gender,occupation_level,age,rate)
select pgco,ltrim(rtrim(pgplan)) , pgsex , pgband , pgage , CAST(pgbasic as varchar(10))
from choa1sis.dbo.lldpg where pgco in('0986')
and ltrim(rtrim(pgplan))[email protected]_plan_code;
set @error_sum += @@error
end
--匯入cash value rate
begin
delete from dbo.t_cash_value_rate where plan_code = @in_plan_code;
insert into dbo.t_cash_value_rate(company_code,plan_code,age,gender,policy_year,basic_csv)
select pcco,ltrim(rtrim(pcplan)) as plancode, CAST(pcage as varchar(10)) as age, pcsex ,CAST(pcdur as varchar(10)) as policy_year,
CAST(pcbacsv as varchar(10)) as basic_csv from choa1sis.dbo.nladpipcsv
where pcco in('0986') and ltrim(rtrim(pcplan)) [email protected]_plan_code;
set @error_sum += @@error
end
--匯入other rate
--年金
declare @other_rate_count int
select @other_rate_count=count(1) from choa1sis.dbo.lldp5 where p5co in('0986') and ltrim(rtrim(p5plan)) = @in_plan_code;
if @other_rate_count>0
begin
delete from dbo.t_other_rate where plan_code = @in_plan_code and r_type='ANNUITY';
insert into dbo.t_other_rate(r_type,plan_code,age,policy_year,rate)
select 'ANNUITY' as r_type, ltrim(rtrim(p5plan)) as plancode,CAST(case ltrim(rtrim(p5aduse))
when 'A' then p5agedur else 0 end as varchar(10)) as age,CAST(case ltrim(rtrim(p5aduse)) when 'D' then p5agedur else 0
end as varchar(10)) as policy_year,cast(p5amtpct as varchar(10)) as rate
from choa1sis.dbo.lldp5 where p5co in('0986') and ltrim(rtrim(p5plan)) = @in_plan_code;
set @error_sum += @@error
end
else
begin
delete from dbo.t_other_rate where plan_code = @in_plan_code and r_type='ANNUITY';
insert into dbo.t_other_rate(r_type,plan_code,age,policy_year,rate)
select 'ANNUITY' as r_type, ltrim(rtrim(pkplan)) as plancode,CAST(case ltrim(rtrim(pkaduse))
when 'A' then pkagedur else 0 end as varchar(10)) as age,CAST(case ltrim(rtrim(pkaduse)) when 'D' then pkagedur else 0
end as varchar(10)) as policy_year,cast(pkamtpct as varchar(10)) as rate
from choa1sis.dbo.lldp5k where pkco in('0986') and ltrim(rtrim(pkplan)) = @in_plan_code;
set @error_sum += @@error
end
--如果發現某條sql執行錯誤則執行回滾 返回1表示執行成功,0表示執行失敗
if @error_sum <> 0
begin
select @result = 0
rollback transaction
end
else
begin
select @result= 1
commit transaction
end
return @result
END
alter 第一次 得用create
其他的毒好理解哈
相關推薦
sqlserver儲存過程/遊標及例項
--系統儲存過程exec sp_databases --檢視系統資料庫exec sp_tables --檢視系統表exec sp_rename 'aaa','bbb' --修改表明aaa為bbbexec sp_rename 'dbo.aaa','col1','col2' --修改表aaa的列col1為col2
SQLSERVER儲存過程的基本語法例項
SQLSERVER儲存過程的基本語法例項 SQLSERVER儲存過程的基本語法例項 一、定義變數--簡單賦值 declare @a intset @a=5 print @a --使用select語句賦值 declare @user1 nvarchar(50) select @user1='張三'prin
mybatis 呼叫sqlserver 儲存過程
<select id="testStoredProcedure" statementType="CALLABLE" resultMap="TestMap"> <![CDATA[ {call AllNewcourse(${shopid},${cours
sqlserver儲存過程實現資料批量刪除--分割字串實現
寫的儲存過程,接收的引數的一個字串,通過分割字串從而實現批量刪除。 IF (@operation = 'delete') BEGIN DECLARE @temp nvarchar(200) DECLARE @splitchar nvarchar(1) SET
【mybatis】mybatis呼叫sqlserver儲存過程和表值函式
儲存過程和表值函式的區別 最簡單的區別是儲存過程是pr開頭的,而儲存過程是fn開頭的,表值函式返回的是一個表結構的結果。如果mybatis用呼叫儲存過程的方式去呼叫表值函式,就會丟擲以下的異常: exc
sqlserver儲存過程
儲存過程 Transact-SQL中的儲存過程,非常類似於Java語言中的方法,它可以重複呼叫。當儲存過程執行一次後,可以將語句快取中,這樣下次執行的時候直接使用快取中的語句。這樣就可以提高儲存過程的效能。 儲存過程的概念 儲存過程Procedure是一組為了完
根據 關鍵字 搜尋 sqlserver儲存過程
SQL SERVER 非常好用的根據某個關鍵字查儲存過程: select * from sys.all_sql_modules where definition like '%wxface%'
SQLServer-儲存過程
儲存過程 一、定義變數 --簡單賦值 declare @a int set @a=5 print @a --使用select語句賦值 declare @user1 nvarchar(50) select @user1='張三' print @user1 declar
SQLSERVER 儲存過程中的事務
1 CREATE PROCEDURE ProcedureNamme 2 AS 3 BEGIN 4 SET NOCOUNT ON; 5 6 BEGIN TRY---------------------開始捕捉異常 7 BEGIN TRAN-------
sqlServer儲存過程查詢語句
select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b where a.is_ms_shipped=0 and a.object_id = b.object_i
sqlserver儲存過程where條件引數為空不加入篩選
CREATE PROCEDURE "dbo"."TEST_PRC"( @no_in VARCHAR(20)
sqlserver儲存過程中利用遊標遍歷結果集簡單示例及查詢資料庫時間
本例項用的是sqlserver2005 在儲存過程中遍歷結果,和查詢資料庫中所有 儲存過程名稱 加以處理以文字形式輸出 原始碼: drop procedure findName create procedure findName--建立一個名為findName的儲存過
SQLSERVER 儲存過程實現分頁查詢 C#後臺獲取查詢結果集
一、為什麼要用分頁查詢 在列表查詢時由於資料量非常多,一次性查出來非常慢,也不能一次顯示給客戶端,特別是在使用ExtJS的GridPanel時候,顯示資料量達到200條時對效能影響難以容忍,所以需要考慮將資料分批次查詢出來,每頁顯示一定量的資料,這就是資料要
php呼叫sqlserver儲存過程例項,帶輸入輸出引數,經測試可用
因工作原因最近需要用到呼叫sqlserver儲存過程,並且需要輸入輸出引數,因為單純的參考網上的一些例子總有問題,最後自己解決後決定寫一寫解決的過程。並把自己寫的3個方案都放上,記錄一下自己的思路過程,經測試方案1為最優方案,效能比方案2,方案3,在10萬數量級快6倍左右。
SQLSERVER儲存過程基本語法(二)
三、迴圈 --while迴圈計算1到100的和 declare @a int declare @sum int set @a=1 set @sum=0 while @a<=100 begin set @sum+=@a set @
SQLSERVER儲存過程語法詳解
1 2 3 4 5 6 7 8 9 10 11 CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @
SQLSERVER儲存過程入門與提高
什麼是儲存過程呢? 定義: 將常用的或很複雜的工作,預先用SQL語句寫好並用一個指定的名稱儲存起來, 那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。 講到這裡,可能有人要問:這麼說儲存過程就是一堆SQL語句而已啊? Microsoft公司為什麼還要新增
SQLServer儲存過程自制資料字典
相信很多小夥伴都對【資料字典】很頭疼。 小編剛入職的時候,老大丟一個專案過來,就一個設計文件,資料字典木有,欄位說明木有, 全部都需要靠“聯絡上下文”來猜。所以小夥伴門一定要養成說明欄位的習慣哦。 說明欄位後我們無需特意建立資料字典,直接建立一個儲存過程就可以查詢欄位意義了。 儲存過程建立如下,小夥伴
sqlserver 儲存過程
這段時間接觸了2個新的資料庫db2根sqlserver 其中業務涉及到把db2的資料轉到sqlserver裡面來,這部分用java程式碼搞得,然後把轉過來的資料 轉到新的系統中來,這部分用到了儲存過程,以前沒接觸過這個東西,正好整理下ALTER PROCEDURE [dbo
"伺服器無法繼續該事務 3400000006"錯誤原因--JAVA呼叫SQLSERVER儲存過程時過程發生異常內部事務未提交
通過JAVA呼叫SQLSERVER儲存過程時,儲存過程內部發生了型別轉換異常,在型別轉換異常發生之前已經將事務打開了,並且在型別轉換那一行沒有采用像如下錯誤處理: if @@error<>0 then goto err e