SqlServer 利用临时表批量添加&&修改数据库表中的数据

.简单的创建临时表

drop table #tmp --删除临时表
--创建临时表
create table #tmp (
    ID    VARCHAR(80) not null,
    PNAME VARCHAR(200)
)
INSERT INTO #tmp(ID,PNAME) SELECT ID,CNAME as PNAME from ORG_DEPARTMENT; --把别的表数据存入临时表
SELECT * FROM #tmp;--查询临时表数据
 
 
// 创建临时表的另一种方式
 
drop table #tmpStudent
select *  into #tmpStudent from ES_NOTICE_TARGET
select * from #tmpStudent

对复杂的创建临时表 更新字段数据

BEGIN --开始
drop table #tmp --删除临时表 可以不要 看需求了 不能删一个在建一个 是不是很影响效率
--创建临时表
create table #tmp (
    ID    VARCHAR(80) not null,
    ZCOUNT VARCHAR(200),
    WCOUNT VARCHAR(200),
    YCOUNT VARCHAR(200)
)
--找到别表数据据插入临时表中
INSERT INTO #tmp(ID,ZCOUNT) SELECT NOTICE_ID AS ID,COUNT(DEPT_ID) AS ZCOUNT from ES_NOTICE_TARGET GROUP BY NOTICE_ID;
--更新临时表字段值 按条件更新
 update #tmp  set WCOUNT=(SELECT  COUNT(READS_IS_OK) as WCOUNT  from ES_NOTICE_TARGET  where #tmp.ID=NOTICE_ID AND (READS_IS_OK='0' OR READS_IS_OK IS NULL) GROUP BY NOTICE_ID) 
 where  EXISTS(SELECT NOTICE_ID AS ID from ES_NOTICE_TARGET  GROUP BY NOTICE_ID) 
 update #tmp  set YCOUNT=(SELECT  COUNT(READS_IS_OK) as WCOUNT  from ES_NOTICE_TARGET  where #tmp.ID=NOTICE_ID AND READS_IS_OK='1'  GROUP BY NOTICE_ID) 
 where  EXISTS(SELECT NOTICE_ID AS ID from ES_NOTICE_TARGET  GROUP BY NOTICE_ID) 
SELECT * FROM #tmp; --查询临时表数据
END --结束
GO --go

修改原理

update 表名 set 表名.修改字段=导入进去的新表.字段 from 导进去的新表 where 导进去的新表.id=表名.id

表名→是我需要修改这里面表中的数据
表名.修改字段→是我最终目的需要修改的字段
导入进去的新表→是我根据需要修改的数据做一个excel表导入数据库(强调这里导入进去的是一个新表),其中导入进去的数据根据我现有数据库中表必须要有唯一的对应ID。

临时表相关命令

判断临时表是否存在,存在则删除

if OBJECT_ID('tempdb..#tempTable') IS NOT NULL

begin

DROP TABLE #temp_Table

end

创建临时表(' # '局部的临时表仅在会话里边, ' ## '全局的的临时表)

create table #temp_Table(
    字段1 约束条件,
    字段2 约束条件,
    ...)
create table #tempTable(
    字段1 约束条件,
    字段2 约束条件,
    ...)

删除临时表和清空临时表数据和约束

DROP table #temp_Table
truncate table #temp_Table

 实例

create table #temp_Table(
    Id uniqueidentifier,
    Cid uniqueidentifier
)

select * from #temp_Table;

insert into #temp_Table(Id,Cid) select x.Id,m.Id as Cid from DeductionRecord x
left join firstApproval y 
on x.PaperNo=y.ctrpaperNo
left join outStockpaper z
on x.PaperNo=z.paperNo
left join WarehouseManagement m
on y.destinationWarehouse=m.Id or z.outboundWarehouse=m.Id
order by x.CreatedTime;

update DeductionRecord set WarehouseId=w.Cid from #temp_Table w where w.Id=DeductionRecord.Id;

DROP table #temp_Table;

 

posted @ 2021-09-10 16:17  netlock  阅读(1515)  评论(0编辑  收藏  举报