以前都是单个表操作,还可以自己解决,今天遇到的这个问题不得不求助论坛的前辈了。实现的目的如下:用sqlserver代理做一个作业,每天按照A表的记录来生成B表的内容。A表    有字段:aid
B表    根据A表里所有的记录来生成新纪录比如A表里有10条记录,想写一个命令,让B表根据A表的内容生成10条新的记录,B表中也有个字段aid与B表对应。请教一下怎么写这个语句那?

解决方案 »

  1.   

    select a.* , b.* from a , b where a.aid = b.aidselect 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
      

  4.   

    insert b select * from a where not exists(select 1 from a where a.aid=b.aid)
      

  5.   

    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
      

  6.   

    重新阐述一下先列出数据库结构:
    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表但是代码不会写,很郁闷。
    楼上所有的答案貌似都行不通。
      

  7.   

    INSERT B表 
    SELECT GETDATE(),AID,INALL,DOWNJIN 
    FROM A表 A
    WHERE NOT EXISTS(
        SELECT 1 FROM B WHERE A.AID=B.BID)在A表没有时间字段的情况下,可以用此代码,放在作业中运行。建议A表新增一个时间字段,这样插入B表时就不用判断不包含已插入的记录,只需插入当天的记录即可。
      

  8.   

    定时作业的制定  企业管理器   
    --管理   
    --SQL Server代理   
    --右键作业   
    --新建作业   
    --"常规"项中输入作业名称   
    --"步骤"项   
    --新建   
    --"步骤名"中输入步骤名   
    --"类型"中选择"Transact-SQL 脚本(TSQL)"   
    --"数据库"选择执行命令的数据库   
    --"命令"中输入要执行的语句:   
        EXEC 存储过程名 ...    --确定   
    --"调度"项   
    --新建调度   
    --"名称"中输入调度名称   
    --"调度类型"中选择你的作业执行安排   
    --如果选择"反复出现"   
    --点"更改"来设置你的时间安排    
    然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行   设置方法:   
    我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.  定时作业的定制参考此方法
      

  9.   

    --如果只考虑从A插入B
    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--属性--启动类型--选择"自动启动"--确定. 
      

  10.   

    --如果只考虑从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)