/*
我有写个测试数据create table t1(MonthWage datetime,Numbers nvarchar(500))
insert into t1 values('2011-07-26','李四')
create table t2(MonthWage datetime,Numbers nvarchar(500))
--我下面这个语句这样写是可以的.但我不知道这样的语句怎么与加入我下面的存储过程连接
insert Into dbo.t2 select MonthWage, Numbers from dbo.t1 where    Numbers  not in
 (select a.Numbers from t2 as a,dbo.t1 as b where  a.MonthWage=b.MonthWage and  a.Numbers=b.Numbers)*/我要解决的
insert into t2
(MonthWage,Numbers,KuangGongTianShu)
exec (@ASSelect)
--(@ASSelect)把这个看作t1
存储过程,我把@ASSelect添加到wage表里面
我这里要加个条件当Wage里面有存在MonthWage,Numbers字段与@ASSelect相应的数据则不添加,只添加不存在的这里面

解决方案 »

  1.   

    不太懂楼主的话,是否可以考虑用 SP_EXECUTESQL, 将表以表变量的形式传入?
      

  2.   

    晴天,我不知道如何表达了.insert into t2
    (MonthWage,Numbers,KuangGongTianShu)
    exec (@ASSelect)我这三行是把@ASSelect这个结果插入到t2里面.但我要在插入时加个条件.相同的数据不需要添加,有新数据再添加.
      

  3.   

    最好把exec (@ASSelect)放到一张临时表,通过临时表和t2来比较是否插入
      

  4.   

    exec (@ASSelect)这个是什么东西能说明下么?
      

  5.   

    你说的是这个意思吗?
    create table tb(A int,B varchar(10),C varchar(10),D varchar(10),E int,F int)
    go
    create procedure getdata
    (@flg int)
    as
    begin
    if @flg=1
    begin
    select 1,'AS','QW','ZX',453,23
    union all select 2,'AS','FR','ZX',232,16
    union all select 1,'DE','QW','ZX',453,23
    union all select 4,'FR','NH','CV',56,78
    union all select 4,'DE','HY','CV',789,78
    union all select 6,'GT','BG','ZX',5654,89
    union all select 4,'JU','NH','CV',56,78
    end
    end
    go
    insert into tb(a,b,c,d,e,f) exec getdata 1  --如果存储过程查询结果与表列名一一对应,则不用加列名列表
    go
    select * from tb
    /*
    A           B          C          D          E           F
    ----------- ---------- ---------- ---------- ----------- -----------
    1           AS         QW         ZX         453         23
    2           AS         FR         ZX         232         16
    1           DE         QW         ZX         453         23
    4           FR         NH         CV         56          78
    4           DE         HY         CV         789         78
    6           GT         BG         ZX         5654        89
    4           JU         NH         CV         56          78(7 行受影响)
    */
    drop procedure getdata
    go
    drop table tb
      

  6.   

    晴天辛苦了.我不是好个意思.我是说怎么在我的这三行语句上修改insert into t2
    (MonthWage,Numbers,KuangGongTianShu)
    exec (@ASSelect+'as t1 where    Numbers  not in
     (select a.Numbers from t2 as a,dbo.t1 as b where  a.MonthWage=b.MonthWage and  a.Numbers=b.Numbers)')
    如改成这样.说句法错误.
      

  7.   

    @ASSelect是个表名的意思?
    如果是,按你给的代码如下:
    insert into t2
    (MonthWage,Numbers,KuangGongTianShu)
    select MonthWage,Numbers,KuangGongTianShu from @ASSelect as t1 
    where Numbers not in
     (select a.Numbers from t2 as a,dbo.t1 as b where a.MonthWage=b.MonthWage and a.Numbers=b.Numbers)
      

  8.   


    他不是一个表名,他的值是
    set @ASSelect ='
    select 
    MonthWage,DepName,P_Name,#TempTable.PostID,#TempTable.Numbers,#TempTable.Ename,BasePay,
    YingGongZuoRi,ShiJiGongZuoRi,Allowance,
    '+@GuanLiFei+' as GuanLiFei ,'+@YangLaoJin+' as YangLaoJin,'+@QuanQin+' as QuanQin,PenaltyAmount,ChiDaoZaoTui,#TempTable.EmployeesTypeNumbers,
    ShuiDianFei,
    BingJia,ShiJia,KuangGongTianShu from #TempTable left join Employees on #TempTable.Numbers=Employees.Numbers'
      

  9.   

    照你这么说,就是个数据集,数据集用as t1后就相当于表t1了的意思,之前发的代码一样行得通
    你可以试下
      

  10.   

    不行的.那个变量数据集是需要用exec才能输出的
      

  11.   

    晕,那你这样,直接把下面代码替代你的存储过程,然后执行存储过程就行了
    insert into t2
    (MonthWage,Numbers,KuangGongTianShu)
    select MonthWage,Numbers,KuangGongTianShu from (
    select  
    MonthWage,DepName,P_Name,#TempTable.PostID,#TempTable.Numbers,#TempTable.Ename,BasePay,
    YingGongZuoRi,ShiJiGongZuoRi,Allowance,
    @GuanLiFei as GuanLiFei ,@YangLaoJin as YangLaoJin,@QuanQin as QuanQin,PenaltyAmount,ChiDaoZaoTui,#TempTable.EmployeesTypeNumbers,
    ShuiDianFei,
    BingJia,ShiJia,KuangGongTianShu from #TempTable left join Employees on #TempTable.Numbers=Employees.Numbers
    ) as t1 
    where Numbers not in
    (select a.Numbers from t2 as a,dbo.t1 as b where a.MonthWage=b.MonthWage and a.Numbers=b.Numbers)
      

  12.   


    insert into t2
    (MonthWage,Numbers,KuangGongTianShu)
    exec sp @ASSelect
      

  13.   

    /*
    要把这段insert into t2 (MonthWage,Numbers,KuangGongTianShu)
    也要写到那个@ASSelect中去,如下:
    */
    set @ASSelect ='
    insert into t2 (MonthWage,Numbers,KuangGongTianShu)
    select  
    MonthWage,DepName,P_Name,#TempTable.PostID,#TempTable.Numbers,#TempTable.Ename,BasePay,
    YingGongZuoRi,ShiJiGongZuoRi,Allowance,
    '+@GuanLiFei+' as GuanLiFei ,'+@YangLaoJin+' as YangLaoJin,'+@QuanQin+' as QuanQin,PenaltyAmount,
    ChiDaoZaoTui,#TempTable.EmployeesTypeNumbers,
    ShuiDianFei,
    BingJia,ShiJia,KuangGongTianShu 
    from #TempTable left join Employees on #TempTable.Numbers=Employees.Numbers
    where Numbers not in
     (select a.Numbers from t2 as a,dbo.t1 as b where a.MonthWage=b.MonthWage and a.Numbers=b.Numbers) '