很是奇怪,存储过程中如果先是insert,最后select,就不会输出列名。
而如果反之,先select,再做insert,就会输出列名。
可我现在就是想插入一个表,然后再select出来,应该怎样处理呢?

解决方案 »

  1.   

    晕死,我还高兴有2个回复呢
    没听懂没关系,举个例子
    create table tmpa (int a)
    create procedure def
    as
    truncate table tmpa
    declare @i int 
    set @i=100
    select @i as a
    insert into tmpa select @i,@i+1DataReader里执行存储过程def,你会发现刷新后列映射里会出现列a
    然后你改下存储过程
    drop procedure def
    go
    create procedure def
    as
    truncate table tmpa
    declare @i int 
    set @i=100
    insert into tmpa select @i,@i+1
    select @i as a你会发现刷新后列映射里的列a没了!!!
    谁能告诉我这是为什么?!
      

  2.   

    insert into tmpa select @i,@i+1 不报错?、、、、、、
      

  3.   

    愁死我了,改过!create table tmpa (int a) 
    create procedure def 
    as 
    truncate table tmpa 
    declare @i int 
    set @i=100 
    select @i as a 
    insert into tmpa select @i DataReader里执行存储过程def,你会发现刷新后列映射里会出现列a 
    然后你改下存储过程 
    drop procedure def 
    go 
    create procedure def 
    as 
    truncate table tmpa 
    declare @i int 
    set @i=100 
    insert into tmpa select @i
    select @i as a DataReader里执行存储过程def,
    你会发现刷新后列映射里的列a没了!!! 
    谁能告诉我这是为什么?! 
      

  4.   

    列名没了数据还有吧?
    不用列名直接用索引好呢?
    例如:DataReader[0]
      

  5.   

    数据当然也没有,也就是说改过之后,
    DataReader不再认为def存储过程有返回结果集。
    难道必须先select吗?
      

  6.   

    可能是你选错了表(select from 后面),下面一个范例,你测试下
    create proc dbo.up_test
    as begin
      declare @tb table(test1 int,test2 int)
      insert into @tb(test1,test2)
      (select 1,2 union all
       select 2,3 union all
       select 2,4 
       )
      select * from @tbend
    go
    exec up_test
    go
    drop proc up_test
      

  7.   

    感谢ironxiao的回复,你的范例很好!
    但是,但是,
    我说的是在ssis包,用DataReader执行存储过程up_test,
    你会发现映射列里并没有显示返回的结果集!
      

  8.   

    我大概知道楼主的意思,你尝试这样:
    set fmtonly off;
    set nocount on ;
    exec def这样应该可以刷新出来的,这个问题是SSIS的数据源读取存储过程的一个问题,一般发生在出现将数据
    插入表变量,临时表等操作时,数据源无法正确刷新。
      

  9.   

    感谢whbo,确实好用!
    另外问一下
    set fmtonly off; 
    set nocount on ; 
    这两句什么意思?用完后要重新设置回去吗?
      

  10.   

    set fmtonly off
    就是只取表结构, 即where 1=0set nocount on 
    不返回影响行数我也是学习中。感谢whbo