表变量及临时表数据批量插入和更新 写法

项目中以前批量插入和更新,因为没有用到EF,所以一直用C#开启事务,拼接sql语句来提交。

最近发现用表变量提交会很简单。

简单列出插入和更新语句:

GO
一:表类型
创建表类型:
CREATE TYPE dbo.stock_details AS TABLE
(
id INT,
goods_id INT,
number INT
)
定义并使用表类型:
DECLARE @stock_details dbo.stock_details
--表类型中插入数据
INSERT INTO @stock_details
        ( id, goods_id, number )
VALUES  ( 1, -- id - int
          1, -- goods_id - int
          33  -- number - int
          )
INSERT INTO @stock_details
        ( id, goods_id, number )
VALUES  ( 11, -- id - int
          11, -- goods_id - int
          133  -- number - int
          )

二:临时表
--创建局部临时表 CREATE TABLE #tempTable(id int NOT NULL,NAME INT NOT NULL ,number int NOT NULL) --从表变量数据插入到临时表中 INSERT into #tempTable SELECT id,goods_id,number FROM @stock_details --批量将表变量数据插入数据库中,注意:字段的个数要求一样多 INSERT dbo.tb_stock SELECT id ,goods_id,number,1 FROM @stock_details --批量将表变量中的数据更新到数据库中 UPDATE dbo.tb_stock SET quantity=[@stock_details].number FROM dbo.tb_stock ,@stock_details WHERE dbo.tb_stock.warehouse_id=[@stock_details].id

前缀“##”为全局临时表,创建全局临时表

CREATE TABLE ##tempTable(id int NOT NULL,NAME INT NOT NULL ,number int NOT NULL)

三.表变量
单独定义一个表变量
DECLARE @tab TABLE(id INT,NAME NVARCHAR(50))

对比优点:
1.表类型,前期已经定义好,后面直接可以定义用就行。
2.表变量和临时表,都会在物理内存存储,数据量比较小几条用表变量,比较大用临时表。
3.表变量只在执行语句块有用。

 

posted @ 2016-09-07 17:17  zhuyapeng  阅读(826)  评论(0编辑  收藏  举报