例如有个一个表#a,id,pid,number
id是通过存储过程aaa自动生成的。
如果想给表增加几行,pid,number一样,只是id不一样,每一行的id都必须用调用aaa得到。可不可以用
insert into #a 
exec()
来弄?如果行的话,怎么弄?不想弄临时表,因为世纪的表中数据很多

解决方案 »

  1.   

    insert into #a(id) exec aaa
      

  2.   

    to: hellowork
    可是还有后面的东西也要一起插入啊,如果只是插入ID就可以按照你说的办了
      

  3.   

    你可以用参数传递,在存储过程里定义个参数,为 output ,假设为@aa
    declare @ab int 
    exec aaa,
    @ab=@aa
    insert #a select @ab ,pid,number
      

  4.   

    上面的例子只是假设aaa存储过程只返回id值时的情况.
    使用"insert 表 exec 存储过程"这种语法结构插入新行时,必须保证存储过程返回的结果集的结构与要插入表的结构一致,如列的数量,列的数据类型兼容等.
      

  5.   

    declare @id int
    exec @id = aaa   /*接收存储过程返回的id值*/
    insert into #a(id,其它列...) select @id,其它列值...
    --或
    insert into #a(id,其它列...) values(@id,其它列值...)
      

  6.   

    to:hellowork
    这样只能是一行一行的插入了。因为每次只能生成一个ID,我的意思是如果想可以用一个insert into 可以插入所有符合条件的行。能行吗?
      

  7.   

    呵呵。谢谢hellowork了。存储过程是可以返回很多行,但是我被逼只能使用特定的存储过程,只能一次返回一个ID。现在改用临时表了,时间不多了。哈哈结贴给分