SQL 循环插入语句和分表以及连接局域内的另一台sql的语句

CREATE INDEX CurrentData_index ON dbo.t_CurrentData(DeviceName,state) 创建索引。

declare @sDate varchar(20)
declare @eDate varchar(20)
declare @mindate datetime
declare @maxdate datetime
declare @mindateStr varchar(20)
declare @maxdateStr varchar(20)
declare @value float

set @sDate = '2015-1-30 00:00:00'
set @eDate = '2015-2-10 00:00:00'

set @mindate = cast(@sDate as datetime)
set @maxdate = dateadd(day,1,@mindate)

while  @maxdate <= cast(@eDate as datetime)
 begin
  set @mindateStr = convert(varchar(19),@mindate,120)
  set @maxdateStr = convert(varchar(19),@maxdate,120)
  --print(@mindateStr)
  print(@maxdateStr)  
  --插数
  --insert into
select @value =  avg(DataValue)from dbo.HistoryData where Collectiontime between @mindate and @maxdate and Code = 'code' group by Code
  insert into HistoryData values(@value,'code',@maxdate,name,1,0,0,'hour1','N','','模拟量','N','N','N','N',0,'N','N','--','--','--','','','')
  set @mindate = @maxdate
  set @maxdate = dateadd(day,1,@maxdate)
 end


--两张表结构一样,且都是创建好的
insert into t_HistoryDataOriginal_2013 select * from t_HistoryDataOriginal where [DataTime] between '2011-01-01' and '2013-12-31';


--另一张表没有创建的
select * into t_HistoryDataOriginal_2013 from t_HistoryDataOriginal where [DataTime] between '2011-01-01' and '2013-12-31';


exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','192.168.45.34' 
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','Zxjc321' 
go 


--查询示例 
--select * from dbo.t_HistoryDataOriginal where IsUpload = 'Y' order by dataTime
--select top 100* from srv_lnk.monitorsystem.dbo.t_HistoryDataOriginal order by DataTime desc




--导入示例 


insert into srv_lnk.monitorsystem.dbo.t_HistoryDataOriginal select * from monitorsystem.dbo.t_HistoryDataOriginal where IsUpload = 'N'
update monitorsystem.dbo.t_HistoryDataOriginal set IsUpload='Y'where IsUpload='N'
--select * into 表 from srv_lnk.数据库名.dbo.t_HistoryDataOriginal


go 
--处理完成后删除链接服务器 
exec sp_dropserver 'srv_lnk','droplogins'

### 回答1: 分表插入数据库的 SQL 语句可以根据具体的需求而定,以下是一些示例: 1. 根据某个字段进行分表插入: 假设有一个 user ,需要根据 user_id 字段的值进行分表插入,每个名为 user_0 ~ user_9,可以使用以下 SQL 语句: ``` INSERT INTO user_0 SELECT * FROM user WHERE user_id % 10 = 0; INSERT INTO user_1 SELECT * FROM user WHERE user_id % 10 = 1; INSERT INTO user_2 SELECT * FROM user WHERE user_id % 10 = 2; ... INSERT INTO user_9 SELECT * FROM user WHERE user_id % 10 = 9; ``` 2. 根据日期进行分表插入: 假设有一个 order ,需要根据订单的创建日期进行分表插入,每个名为 order_20210101 ~ order_20211231,可以使用以下 SQL 语句: ``` INSERT INTO order_20210101 SELECT * FROM order WHERE DATE_FORMAT(create_time, '%Y%m%d') = '20210101'; INSERT INTO order_20210102 SELECT * FROM order WHERE DATE_FORMAT(create_time, '%Y%m%d') = '20210102'; ... INSERT INTO order_20211231 SELECT * FROM order WHERE DATE_FORMAT(create_time, '%Y%m%d') = '20211231'; ``` 3. 根据数据量进行分表插入: 假设有一个 log ,需要根据数据量进行分表插入,每个最多存放 1000 条记录,可以使用以下 SQL 语句: ``` SET @table_name = 'log_0'; SET @count = 0; INSERT INTO @table_name SELECT * FROM log; UPDATE log SET id = NULL ORDER BY id LIMIT 1000; SET @count = @count + 1000; WHILE @count < 100000 DO SET @table_name = CONCAT('log_', FLOOR(@count / 1000)); INSERT INTO @table_name SELECT * FROM log WHERE id IS NOT NULL; UPDATE log SET id = NULL ORDER BY id LIMIT 1000; SET @count = @count + 1000; END WHILE; ``` 以上仅为示例,具体的分表插入方式需要根据实际情况进行调整。 ### 回答2: 分表插入数据库的SQL语句是指将一个大的数据分割成多个小,并将数据插入到这些小中的操作。 一种常见的分表策略是根据某个字段的值进行哈希计算,然后将结果作为名的一部分。这样可以保证相同字段值的数据会被分配到同一张中,提高查询性能。下面是一个简单的示例: ``` -- 创建原始大 CREATE TABLE `big_table` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL, `age` INT NOT NULL ); -- 创建分表 CREATE TABLE `small_table_1` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL, `age` INT NOT NULL ); CREATE TABLE `small_table_2` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL, `age` INT NOT NULL ); -- 插入数据到分表 INSERT INTO `small_table_1` (id, name, age) SELECT id, name, age FROM `big_table` WHERE (id % 2) = 0; -- 偶数id的数据插入到small_table_1 INSERT INTO `small_table_2` (id, name, age) SELECT id, name, age FROM `big_table` WHERE (id % 2) = 1; -- 奇数id的数据插入到small_table_2 ``` 以上示例中,首先创建了原始的大`big_table`和两个分表`small_table_1`和`small_table_2`,然后通过`INSERT INTO ... SELECT`语句将相应的数据插入到对应的分表中。通过对数据进行哈希分割,可以将大的数据分散到多个小中,提高查询性能和数据管理的灵活性。 ### 回答3: 要分表插入数据库的SQL语句,首先需要确定要插入的数据是如何分布在各个中的。接着,可以使用INSERT INTO语句插入数据。 比如,假设有三张A、B、C,它们的结构相同,都有id和name两个字段。现在要将一批数据插入这三张中。 可以按如下示例编写SQL语句: INSERT INTO A (id,name) VALUES (1,"张三"); INSERT INTO B (id,name) VALUES (2,"李四"); INSERT INTO C (id,name) VALUES (3,"王五"); 以上语句分别向A、B、C中插入了一条数据。 如果需要批量插入多条数据,可以使用INSERT INTO ... SELECT语句的方式。示例如下: INSERT INTO A (id,name) SELECT id,name FROM 源 WHERE 条件; 以上语句将源中满足条件的数据插入A中。 总之,分表插入数据库的SQL语句可以根据具体情况来编写,可以使用INSERT INTO语句逐条插入数据,也可以使用INSERT INTO ... SELECT语句批量插入数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值