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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM