1. 程式人生 > >SQL 使用臨時表和臨時變數完成update表字段---實際案例

SQL 使用臨時表和臨時變數完成update表字段---實際案例

-- 使用臨時表
-- 建立臨時表
--ALTER TABLE TS_ExpenseApplication_Reim_Detail ADD BgCode NVARCHAR(50) NULL, BgItem NVARCHAR(50) NULL, BgCate NVARCHAR(50) NULL;

IF OBJECT_ID('dbo.tempExpense','U') IS NOT NULL DROP TABLE dbo.tempExpense;
GO

SELECT *
INTO dbo.tempExpense
FROM TS_ExpenseApplication_Reim_Detail
where
ISNULL(Bgcode,'')='' ORDER BY TaskID; --select budgetno,BgCode,* from TS_ExpenseApplication_Reim_Detail --select * from TS_ExpenseApplication_Reim_Detail1 --SELECT * FROM dbo.tempExpense; -- 宣告變數 DECLARE @task AS INT, @budgetnum AS NVARCHAR(50) , @budgetcode AS NVARCHAR(50), @Costcenter AS NVARCHAR(
50) , @Feecategory AS NVARCHAR(50), @budgetItem AS NVARCHAR(50); WHILE EXISTS(SELECT TaskID FROM dbo.tempExpense) BEGIN -- 也可以使用top 1 SET ROWCOUNT 1 SELECT @task= TaskID, @budgetnum= BudgetNo FROM dbo.tempExpense;
  --抓取費用類別
select @Costcenter=FreeCategory from TS_ExpenseApplication_Reim a inner join Trina_CostCenterFreeCategory b on a.costcentercode=b.CostCenterCode
where TaskID=@task; print @Costcenter; --B002 BA05 B003 B004 B003_1 B004_1 B006 B007 B010 B017 B021 B022 B027 B030 B031 B032 B027高管手機 --根據規則匹配對應預算號 begin if CHARINDEX('B004_1',@budgetnum)>0 set @budgetcode='B004_1'; else if CHARINDEX('B003_1',@budgetnum)>0 set @budgetcode='B003_1'; else if CHARINDEX('B027高管手機',@budgetnum)>0 set @budgetcode='B027高管手機'; else if CHARINDEX('B002',@budgetnum)>0 set @budgetcode='B002'; else if CHARINDEX('BA05',@budgetnum)>0 set @budgetcode='BA05'; else if CHARINDEX('B003',@budgetnum)>0 set @budgetcode='B003'; else if CHARINDEX('B004',@budgetnum)>0 set @budgetcode='B004'; else if CHARINDEX('B006',@budgetnum)>0 set @budgetcode='B006'; else if CHARINDEX('B007',@budgetnum)>0 set @budgetcode='B007'; else if CHARINDEX('B010',@budgetnum)>0 set @budgetcode='B010'; else if CHARINDEX('B017',@budgetnum)>0 set @budgetcode='B017'; else if CHARINDEX('B021',@budgetnum)>0 set @budgetcode='B021'; else if CHARINDEX('B022',@budgetnum)>0 set @budgetcode='B022'; else if CHARINDEX('B027',@budgetnum)>0 set @budgetcode='B027'; else if CHARINDEX('B030',@budgetnum)>0 set @budgetcode='B030'; else if CHARINDEX('B031',@budgetnum)>0 set @budgetcode='B031'; else if CHARINDEX('B032',@budgetnum)>0 set @budgetcode='B032'; else set @budgetcode=''; end print @budgetcode; --抓取關聯的維護表中會計號和科目 begin if @Costcenter='銷售費用' begin select @budgetItem=SellingCode,@Feecategory=SellingName from MT_BudgetFeeCategory where BudgetCode=@budgetcode; print @budgetItem; print @Feecategory; end else if @Costcenter='管理費用' begin select @budgetItem=GACode,@Feecategory=GAName from MT_BudgetFeeCategory where BudgetCode=@budgetcode; print @budgetItem; print @Feecategory; end else if @Costcenter='研發費用' begin select @budgetItem=RDCode,@Feecategory=RDName from MT_BudgetFeeCategory where BudgetCode=@budgetcode; print @budgetItem; print @Feecategory; end else if @Costcenter='製造費用' begin select @budgetItem=OverheadCode,@Feecategory=OverheadName from MT_BudgetFeeCategory where BudgetCode=@budgetcode; print @budgetItem; print @Feecategory; end else begin select @budgetItem='',@Feecategory='' from MT_BudgetFeeCategory where BudgetCode=@budgetcode; print @budgetItem; print @Feecategory; end end UPDATE TS_ExpenseApplication_Reim_Detail SET BgCode= @budgetcode,[email protected],[email protected] WHERE TaskID=@task; set @budgetcode=''; set @Feecategory=''; set @budgetItem=''; SET ROWCOUNT 0 DELETE FROM dbo.tempExpense WHERE TaskID=@task; END