以前都是单个表操作,还可以自己解决,今天遇到的这个问题不得不求助论坛的前辈了。实现的目的如下:用sqlserver代理做一个作业,每天按照A表的记录来生成B表的内容。A表 有字段:aid
B表 根据A表里所有的记录来生成新纪录比如A表里有10条记录,想写一个命令,让B表根据A表的内容生成10条新的记录,B表中也有个字段aid与B表对应。请教一下怎么写这个语句那?
B表 根据A表里所有的记录来生成新纪录比如A表里有10条记录,想写一个命令,让B表根据A表的内容生成10条新的记录,B表中也有个字段aid与B表对应。请教一下怎么写这个语句那?
解决方案 »
- 请问一个简单的问题。
- 关于取消SQL Server自动备份的问题
- 速度问题, 条件放在新建Join table里和放在Where里,哪个快?
- 如何在dts中设置参数,然后从查询分析器中调用
- 怎样实现1、把某条记录中某个字段的a变成b 2、在某个字段的最后面加上几个字
- Reporting Serivice安装问题~!!求救!!!
- 谁能帮帮我?
- sql中的存储过程和函数有些什么使用上的区别?
- insert into dsn1:table select * from dsn2:table!!!运行为何失败???在线求助!!!
- 请问如何PB和SQL SERVER连接?
- 关于站内邮箱简单的问题
- SQL Server 合并结果集
最好给出完整的表结构,测试数据,计算方法和正确结果.发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
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
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表但是代码不会写,很郁闷。
楼上所有的答案貌似都行不通。
SELECT GETDATE(),AID,INALL,DOWNJIN
FROM A表 A
WHERE NOT EXISTS(
SELECT 1 FROM B WHERE A.AID=B.BID)在A表没有时间字段的情况下,可以用此代码,放在作业中运行。建议A表新增一个时间字段,这样插入B表时就不用判断不包含已插入的记录,只需插入当天的记录即可。
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
EXEC 存储过程名 ... --确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定. 定时作业的定制参考此方法
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--属性--启动类型--选择"自动启动"--确定.
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)