-- 使用临时表
-- 创建临时表
--ALTER TABLE TS_ExpenseApplication_Reim_Detail ADD BgCode NVARCHAR() NULL, BgItem NVARCHAR() NULL, BgCate NVARCHAR() 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() ,
@budgetcode AS NVARCHAR(),
@Costcenter AS NVARCHAR() ,
@Feecategory AS NVARCHAR(),
@budgetItem AS NVARCHAR(); WHILE EXISTS(SELECT TaskID FROM dbo.tempExpense)
BEGIN
-- 也可以使用top
SET ROWCOUNT
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)>
set @budgetcode='B004_1';
else if CHARINDEX('B003_1',@budgetnum)>
set @budgetcode='B003_1';
else if CHARINDEX('B027高管手机',@budgetnum)>
set @budgetcode='B027高管手机';
else if CHARINDEX('B002',@budgetnum)>
set @budgetcode='B002';
else if CHARINDEX('BA05',@budgetnum)>
set @budgetcode='BA05';
else if CHARINDEX('B003',@budgetnum)>
set @budgetcode='B003';
else if CHARINDEX('B004',@budgetnum)>
set @budgetcode='B004';
else if CHARINDEX('B006',@budgetnum)>
set @budgetcode='B006';
else if CHARINDEX('B007',@budgetnum)>
set @budgetcode='B007';
else if CHARINDEX('B010',@budgetnum)>
set @budgetcode='B010';
else if CHARINDEX('B017',@budgetnum)>
set @budgetcode='B017';
else if CHARINDEX('B021',@budgetnum)>
set @budgetcode='B021';
else if CHARINDEX('B022',@budgetnum)>
set @budgetcode='B022';
else if CHARINDEX('B027',@budgetnum)>
set @budgetcode='B027';
else if CHARINDEX('B030',@budgetnum)>
set @budgetcode='B030';
else if CHARINDEX('B031',@budgetnum)>
set @budgetcode='B031';
else if CHARINDEX('B032',@budgetnum)>
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,BgItem=@budgetItem,BgCate=@Feecategory WHERE TaskID=@task;
set @budgetcode='';
set @Feecategory='';
set @budgetItem='';
SET ROWCOUNT DELETE FROM dbo.tempExpense WHERE TaskID=@task;
END

SQL 使用临时表和临时变量完成update表字段---实际案例的更多相关文章

  1. SQL Server 临时表和表变量系列之选择篇

    原文地址:https://yq.aliyun.com/articles/69187 摘要: # 摘要 通过前面的三篇系列文章,我们对临时表和表变量的概念.对比和认知误区已经有了非常全面的认识.其实,我 ...

  2. mysql / pgsql 使用sql语句查询数据库所有表注释已经表字段注释

    mysql使用sql语句查询数据库所有表注释已经表字段注释(转载)   场景: 1. 要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 ‘mammo ...

  3. SQL数据库中临时表、临时变量和WITH AS关键词创建“临时表”的区别

    原文链接:https://www.cnblogs.com/zhaowei303/articles/4204805.html SQL数据库中数据处理时,有时候需要建立临时表,将查询后的结果集放到临时表中 ...

  4. 小记sql server临时表与表变量的区别

    临时表与表变量都可以起到“临时”的作用,那么两者主要的区别是什么呢? 这里不讨论创建方式,以及全局临时表.会话临时表这些,主要记录一下个人对两者的主要区别以及适用情况的看法,有什么不对或补充的地方,欢 ...

  5. SQL Server 临时表 Vs 表变量

    开始 说临时表和表变量,这是一个古老的话题,我们在网上也找到很多的资料阐述两者的特征,优点与缺点.这里我们在SQL Server 2005\SQL Server 2008版本上通过举例子,说明临时表和 ...

  6. mysql使用sql语句查询数据库所有表注释已经表字段注释

    场景: 1. 要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 ‘mammothcode’ 所有表注释 */ SELECT TABLE_NAME,T ...

  7. coding++ :MySQL 使用 SQL 语句查询数据库所有表注释已经表字段注释

    1.要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 ‘mammothcode’ 所有表注释 */ SELECT TABLE_NAME,TABLE_ ...

  8. SQL Server 判断表名称、索引、表字段是否存在

    1.判断索引是否存在 ps:@tableName 表名称, @indexName 索引名 IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id=OB ...

  9. sql 查询所有数据库、表名、表字段总结

    ms sql server 1.查询所有表select [id], [name] from [sysobjects] where [type] = 'u' order by [name]2.查询所有数 ...

随机推荐

  1. [Swift]LeetCode844. 比较含退格的字符串 | Backspace String Compare

    Given two strings S and T, return if they are equal when both are typed into empty text editors. # m ...

  2. [Swift]LeetCode861. 翻转矩阵后的得分 | Score After Flipping Matrix

    We have a two dimensional matrix A where each value is 0 or 1. A move consists of choosing any row o ...

  3. java中过多if-else分支语句的优化方案

    利用Map优化过的的if-else分支 package com.taiping.test; import java.util.HashMap;import java.util.Map; public ...

  4. Python档案袋(文件系列操作 )

    文件读写基础 简单的读文件: # r 表示只能读 #打开文件,得到文件光标对象,文件不存在则报错 f=open("ww.txt","r",encoding=&q ...

  5. 【SQL进阶】03.执行计划之旅1 - 初探

    听到大牛们说执行计划,总是很惶恐,是对知识的缺乏的惶恐,所以必须得学习执行计划,以减少对这一块知识的惶恐,下面是对执行计划的第一讲-理解执行计划. 本系列[T-SQL]主要是针对T-SQL的总结. S ...

  6. C#操作进程(Process)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. java基础(四)-----抽象类与接口

    抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们 ...

  8. redis 系列9 对象类型(字符串,哈希,列表,集合,有序集合)与数据结构关系

    一.概述 在前面章节中,主要了解了 Redis用到的主要数据结构,包括:简单动态字符串.链表(双端链表).字典.跳跃表. 整数集合.压缩列表(后面再了解).Redis没有直接使用这些数据结构来实现键值 ...

  9. Spring RestTemplate中几种常见的请求方式

    https://github.com/lenve/SimpleSpringCloud/tree/master/RestTemplate在Spring Cloud中服务的发现与消费一文中,当我们从服务消 ...

  10. 外接程序 VMDebugger 未能加载或导致了异常 修复

    单击进入 是 visual studio   在 VMWARE 菜单栏上 单击 右键,出现如图,然后选择  自定义(C)...   打开 自定义 工具栏 里 选中 VMware 然后单击 删除 按钮 ...