实现的目的如下:用sqlserver代理做一个作业,每天按照A表的记录来生成B表的内容。
A表 有字段:aid
B表 根据A表里所有的记录来生成新纪录
比如A表里有10条记录,想写一个命令,让B表根据A表的内容生成10条新的记录,B表中也有个字段aid与B表对应。
请教一下怎么写这个语句那?
17 个解决方案
#1
select a.* , b.* from a , b where a.aid = b.aid
select top 10 a.* , b.* from a , b where a.aid = b.aid
select top 10 a.* , b.* from a , b where a.aid = b.aid
#2
insert b select * from a where not exists(select 1 from a where a.aid=b.aid)
#3
你最好是:
发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
最好给出完整的表结构,测试数据,计算方法和正确结果.
发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
#4
应该不只是10条吧,只要把不重复的插入进去就完事了吧
#5
insert b select * from a where not exists(select 1 from a where a.aid=b.aid)
#6
declare @i int
set @i=1
while(@i<=10) --A表的10条记录
begin
select top 1 aid from A where aid not in(select top (@i-1) aid form A)
--SQL 处理语句...
set @i=@i+1
end
#7
这个是循环处理...
#8
楼上 如果记录不是10条
而是根据A表的总条数来判断
该怎么写?
而是根据A表的总条数来判断
该怎么写?
#9
3楼.
#10
#11
看看4L是不是你要的
#12
重新阐述一下
先列出数据库结构:
A表
[aid] [int] IDENTITY (1, 1) NOT NULL ,(广告的ID)
[downjin] [int] NULL ,(今天下载量)
[inall] [int] NULL ,(今天的点击量)
B表
[id] [int] IDENTITY (1, 1) NOT NULL ,(id无作用)
[days] [datetime] NULL ,(记录日期,如2010-4-20)
[aid] [int] NULL ,(与A表的aid相同)
[inall] [int] NULL ,(与A表的相同)
[downall] [int] NULL ,与A表的相同)
A表主要放广告的点击和下载量,只记录当天的。A中有多条记录,一条广告一个记录,无重复数据。
B表是记录所有日期的广告数据的,按日期来生成记录,即每过一天,B表就根据A表有多少条记录来生成新的记录,以日期区分是哪天的。
我想要做的是这样的:
做一个作业,每天0点执行一次,每次执行就把前一天A表中的数据导入到B表
但是代码不会写,很郁闷。
楼上所有的答案貌似都行不通。
先列出数据库结构:
A表
[aid] [int] IDENTITY (1, 1) NOT NULL ,(广告的ID)
[downjin] [int] NULL ,(今天下载量)
[inall] [int] NULL ,(今天的点击量)
B表
[id] [int] IDENTITY (1, 1) NOT NULL ,(id无作用)
[days] [datetime] NULL ,(记录日期,如2010-4-20)
[aid] [int] NULL ,(与A表的aid相同)
[inall] [int] NULL ,(与A表的相同)
[downall] [int] NULL ,与A表的相同)
A表主要放广告的点击和下载量,只记录当天的。A中有多条记录,一条广告一个记录,无重复数据。
B表是记录所有日期的广告数据的,按日期来生成记录,即每过一天,B表就根据A表有多少条记录来生成新的记录,以日期区分是哪天的。
我想要做的是这样的:
做一个作业,每天0点执行一次,每次执行就把前一天A表中的数据导入到B表
但是代码不会写,很郁闷。
楼上所有的答案貌似都行不通。
#13
INSERT B表在A表没有时间字段的情况下,可以用此代码,放在作业中运行。建议A表新增一个时间字段,这样插入B表时就不用判断不包含已插入的记录,只需插入当天的记录即可。
SELECT GETDATE(),AID,INALL,DOWNJIN
FROM A表 A
WHERE NOT EXISTS(
SELECT 1 FROM B WHERE A.AID=B.BID)
#14
定时作业的制定定时作业的定制参考此方法
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
EXEC 存储过程名 ...
--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
#15
--如果只考虑从A插入B
insert into b(days , aid , inall , downall)
select convert(varchar(10),getdate(),120) , aid , inall ,downjin from a
把上面的语句做成存储过程在下面的作业中去调用.
insert into b(days , aid , inall , downall)
select convert(varchar(10),getdate(),120) , aid , inall ,downjin from a
把上面的语句做成存储过程在下面的作业中去调用.
定时作业的制定
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
EXEC 存储过程名 ... --该存储过程用于创建表
--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
#16
--如果只考虑从A插入B
insert into b(days , aid , inall , downall)
select convert(varchar(10),getdate(),120) , aid , inall ,downjin from a
--如果考虑数据可能存在重复。
insert into b(days , aid , inall , downall)
select convert(varchar(10),getdate(),120) , aid , inall ,downjin from a
where not exists
(select 1 from b where days = convert(varchar(10),getdate(),120) and aid = a.aid)
#17
用楼上的方法解决了
谢谢各位。
谢谢各位。
#1
select a.* , b.* from a , b where a.aid = b.aid
select top 10 a.* , b.* from a , b where a.aid = b.aid
select top 10 a.* , b.* from a , b where a.aid = b.aid
#2
insert b select * from a where not exists(select 1 from a where a.aid=b.aid)
#3
你最好是:
发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
最好给出完整的表结构,测试数据,计算方法和正确结果.
发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
#4
应该不只是10条吧,只要把不重复的插入进去就完事了吧
#5
insert b select * from a where not exists(select 1 from a where a.aid=b.aid)
#6
declare @i int
set @i=1
while(@i<=10) --A表的10条记录
begin
select top 1 aid from A where aid not in(select top (@i-1) aid form A)
--SQL 处理语句...
set @i=@i+1
end
#7
这个是循环处理...
#8
楼上 如果记录不是10条
而是根据A表的总条数来判断
该怎么写?
而是根据A表的总条数来判断
该怎么写?
#9
3楼.
#10
#11
看看4L是不是你要的
#12
重新阐述一下
先列出数据库结构:
A表
[aid] [int] IDENTITY (1, 1) NOT NULL ,(广告的ID)
[downjin] [int] NULL ,(今天下载量)
[inall] [int] NULL ,(今天的点击量)
B表
[id] [int] IDENTITY (1, 1) NOT NULL ,(id无作用)
[days] [datetime] NULL ,(记录日期,如2010-4-20)
[aid] [int] NULL ,(与A表的aid相同)
[inall] [int] NULL ,(与A表的相同)
[downall] [int] NULL ,与A表的相同)
A表主要放广告的点击和下载量,只记录当天的。A中有多条记录,一条广告一个记录,无重复数据。
B表是记录所有日期的广告数据的,按日期来生成记录,即每过一天,B表就根据A表有多少条记录来生成新的记录,以日期区分是哪天的。
我想要做的是这样的:
做一个作业,每天0点执行一次,每次执行就把前一天A表中的数据导入到B表
但是代码不会写,很郁闷。
楼上所有的答案貌似都行不通。
先列出数据库结构:
A表
[aid] [int] IDENTITY (1, 1) NOT NULL ,(广告的ID)
[downjin] [int] NULL ,(今天下载量)
[inall] [int] NULL ,(今天的点击量)
B表
[id] [int] IDENTITY (1, 1) NOT NULL ,(id无作用)
[days] [datetime] NULL ,(记录日期,如2010-4-20)
[aid] [int] NULL ,(与A表的aid相同)
[inall] [int] NULL ,(与A表的相同)
[downall] [int] NULL ,与A表的相同)
A表主要放广告的点击和下载量,只记录当天的。A中有多条记录,一条广告一个记录,无重复数据。
B表是记录所有日期的广告数据的,按日期来生成记录,即每过一天,B表就根据A表有多少条记录来生成新的记录,以日期区分是哪天的。
我想要做的是这样的:
做一个作业,每天0点执行一次,每次执行就把前一天A表中的数据导入到B表
但是代码不会写,很郁闷。
楼上所有的答案貌似都行不通。
#13
INSERT B表在A表没有时间字段的情况下,可以用此代码,放在作业中运行。建议A表新增一个时间字段,这样插入B表时就不用判断不包含已插入的记录,只需插入当天的记录即可。
SELECT GETDATE(),AID,INALL,DOWNJIN
FROM A表 A
WHERE NOT EXISTS(
SELECT 1 FROM B WHERE A.AID=B.BID)
#14
定时作业的制定定时作业的定制参考此方法
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
EXEC 存储过程名 ...
--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
#15
--如果只考虑从A插入B
insert into b(days , aid , inall , downall)
select convert(varchar(10),getdate(),120) , aid , inall ,downjin from a
把上面的语句做成存储过程在下面的作业中去调用.
insert into b(days , aid , inall , downall)
select convert(varchar(10),getdate(),120) , aid , inall ,downjin from a
把上面的语句做成存储过程在下面的作业中去调用.
定时作业的制定
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
EXEC 存储过程名 ... --该存储过程用于创建表
--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
#16
--如果只考虑从A插入B
insert into b(days , aid , inall , downall)
select convert(varchar(10),getdate(),120) , aid , inall ,downjin from a
--如果考虑数据可能存在重复。
insert into b(days , aid , inall , downall)
select convert(varchar(10),getdate(),120) , aid , inall ,downjin from a
where not exists
(select 1 from b where days = convert(varchar(10),getdate(),120) and aid = a.aid)
#17
用楼上的方法解决了
谢谢各位。
谢谢各位。