Insert Data Demo--插入数据的四种方式及测试

--Insert Data Demo
--basic table
use tempdb;
GO

if(object_id('dbo.orders','U') is not NULL) drop table dbo.orders;
GO
create table dbo.orders(
orderid int not null /*identity(1,1)*/ constraint PK_orders primary key,
orderdate date not null constraint DFT_orders_order_date default(current_timestamp),
empid int not null,
custid varchar(10) not null
)

select * from dbo.orders;

-------------Way 1 insert values
insert into dbo.orders values(10001,'20170505',1,'A');
--rows
insert into dbo.orders values
(10002,'20170505',1,'B'),
(10003,'20170506',2,'B'),
(10004,'20170506',1,'A');
--define columns name
insert into dbo.orders(orderid,orderdate,empid,custid) values
(10005,'20170505',1,'C'),
(10006,'20170506',2,'C');
--列:未指定值>default值>未指定default值>nullable>NULL
--values create virtual table
select * from 
(values 
(10002,'20170505',1,'B'),
(10003,'20170506',2,'B'),
(10004,'20170506',1,'A')) as D(id,date,eid,cid);

-------------Way 2 insert select
truncate table dbo.orders;
--insert from a (virtual) table 
insert into dbo.orders 
select * from 
(values 
(10002,'20170505',1,'B'),
(10003,'20170506',2,'B'),
(10004,'20170506',1,'A')) as D(id,date,eid,cid) 
--3 rows affected
--define columns name
insert into dbo.orders(orderid,orderdate,empid,custid)
select * from 
(values 
(10001,'20170505',1,'B'),
(10005,'20170506',2,'B'),
(10006,'20170506',1,'A')) as D(id,date,eid,cid) 
--NOTE:if there are "()" between select clause,must define columns name
insert into dbo.orders
select * from (values (10008,'20170505',1,'B')) as D(id,date,eid,cid) ;
--1 rows affected
insert into dbo.orders
(select * from (values (10008,'20170505',1,'B')) as D(id,date,eid,cid) );
--Error
/*Lookup Error - SQL Server Database Error: Incorrect syntax near the keyword 'select'.*/
--Speed:insert select 场景支持以最小日志方式记录日志操作,整个事务提交,效率高

-------------Way 3 insert exec
if(object_id('dbo.getOrder','P') is not null) drop procedure dbo.getOrder;
GO
create proc dbo.getOrder
@orderid as nvarchar(10)
as 
select orderid+100,orderdate,empid,custid from dbo.orders 
where orderid=@orderid
GO
--exec proc
exec dbo.getOrder @orderid=10001
--Insert exec
insert into dbo.orders
exec dbo.getOrder @orderid=10001
--1 rows affected
insert into dbo.orders(orderid,orderdate,empid,custid)
exec dbo.getOrder @orderid=10002;
--1 rows affected

-------------Way 3 select into
/*ANSI SQL is not included select into caluse */
select * into tempA from dbo.orders;
--10 rows affected
--DML SQL
CREATE TABLE [dbo].[tempA] (
[orderid] int NOT NULL,
[orderdate] date NOT NULL,
[empid] int NOT NULL,
[custid] varchar(10) NOT NULL);
--test insert(double primary key)
insert into tempA 
select * from (values (10001,'20170505',1,'B')) as D(id,date,eid,cid)
--1 rows affected
--identity test
create table #t(id int not null identity(1,1) constraint PK_TT primary key,val int);
insert #t(val) select 1;
select * into tempB from #t;
--DML SQL
CREATE TABLE [dbo].[tempB] (
[id] int IDENTITY(1, 1) NOT NULL,
[val] int NULL)
/*select into caluse:
Cope:column name,data type,nullable,identity,data
Not Cope:constraint,index,trigger
*/
--Speed:select into 非完整恢复模式(FULL)下会以最小日志方式记录日志操作,效率高
--多表/多集合 select into:
select a.test into selectIntoTables from tableA A join tableB B on ...
select test into selectIntoTables from tableA A intersect select test tableB ...
--select into 顺序测试
select * into tempC from dbo.orders order by orderdate;
select * from tempC;--not sort
--执行顺序:集合操作>select>into selectIntoTables>order by

-------------Way 4 bulk into
select * from dbo.orders;
--export D:\CSVFile.csv
truncate table dbo.orders;
--bulk insert
bulk insert dbo.orders --(orderid,orderdate,empid,custid)
from 'D:\CSVFile.csv'
with(
datafiletype='char',
fieldterminator=',',
rowterminator ='\n'
);
--去掉标题行(从第一行导入)
--ANSI编码
--文件必须放在服务器本地
--date不能包含在""内(删除双引号)
--date包含时间会被截断
/*--D:\CSVFile.csv
10001,2017-05-05 00:00:00,1,B
10002,2017-05-05 00:00:00,1,B
10003,2017-05-06 00:00:00,2,B
10004,2017-05-06 00:00:00,1,A
10005,2017-05-06 00:00:00,2,B
10006,2017-05-06 00:00:00,1,A
10007,2017-05-05 00:00:00,1,B
10008,2017-05-05 00:00:00,1,B
10101,2017-05-05 00:00:00,1,B
10102,2017-05-05 00:00:00,1,B
*/
--BULK INSERT 能以最小日志方式记录日志操作,效率高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一个简单的xxl-job的SpringBoot项目数据插入执行器demo。具体步骤如下: 1. 首先,你需要在pom.xml中添加xxl-job的依赖: ```xml <dependency> <groupId>com.xxl-job</groupId> <artifactId>xxl-job-core</artifactId> <version>2.2.1</version> </dependency> ``` 2. 然后,你需要在application.properties中配置xxl-job的相关参数: ```properties # xxl-job admin address list, such as "http://address" or "http://address01,http://address02" xxl.job.admin.addresses=http://localhost:8080/xxl-job-admin # executor registry name, must be unique xxl.job.executor.appname=executor-demo # executor ip xxl.job.executor.ip=127.0.0.1 # executor port xxl.job.executor.port=9999 # executor log path xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler # executor log retention days xxl.job.executor.logretentiondays=30 ``` 3. 接下来,你需要编写一个继承自IJobHandler接口的具体任务处理类,例如: ```java @Component public class DemoJobHandler extends IJobHandler { @Autowired private DemoMapper demoMapper; @Override public ReturnT<String> execute(String param) throws Exception { Demo demo = new Demo(); demo.setName("xxl-job"); demo.setAge(18); demoMapper.insert(demo); return ReturnT.SUCCESS; } } ``` 其中,Demo是一个简单的实体类,DemoMapper是基于Mybatis的Mapper接口。 4. 最后,你需要在SpringBoot的启动类中添加@EnableXxlJob注解,以启用xxl-job: ```java @SpringBootApplication @EnableXxlJob @MapperScan("com.example.mapper") public class ExecutorDemoApplication { public static void main(String[] args) { SpringApplication.run(ExecutorDemoApplication.class, args); } } ``` 现在,你就可以在xxl-job的管理页面上创建一个新的任务,并选择刚才编写的执行器demo进行测试了。当任务执行时,它会在数据库中插入一条记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值