找了很多资料 但没有讲的很清楚的 因为我的临时表字段是不固定的 所以必须使用临时表 希望各位不吝赐教

解决方案 »

  1.   

    早上刚写了个入库过程,小用了一下临时表,贴出来你看看.另外你的描述可不可以需求再清楚一下,难道是要临时表的讲解吗?msdn上看看,或是联机帮助上看看.
    create proc rkreport
    (
    @starttime varchar(10),
    @endtime varchar(10)
    )
    as

    select rkname,rktype,sum(rkcount) as rkcount into #temprkreport from ccprk where rktime between convert(datetime,@starttime) and convert(datetime,@endtime) group by rkname,rktype
    exec ('alter table #temprkreport add tempid int identity(1,1)')
    exec ('alter table #temprkreport add rkggxh nvarchar(3600)')
    update #temprkreport set rkggxh=''
    declare @RowCount int
    select @RowCount=max(tempid) from #temprkreport
    declare @rkname varchar(100)
    declare @rktype varchar(100)
    declare @tempstr nvarchar(3600)
    while(@RowCount>0)
    begin
    select @rkname=rkname,@rktype=rktype from #temprkreport where tempid=@RowCount
    set @tempstr=''
    select @tempstr=@tempstr+rkggxh+',' from ccprk where rktime between convert(datetime,@starttime) and convert(datetime,@endtime) and rkname=@rkname and rktype=@rktype
    update #temprkreport set rkggxh=@tempstr where tempid=@RowCount
    set @tempstr=''
    set @RowCount=@RowCount-1
    end
    insert into #temprkreport(rkname,rktype,rkggxh,rkcount) select '合计' as rkname,'--','--',sum(rkcount) as rkcount from #temprkreport
    select rkname as 产品名称,rktype as 产品类型,rkggxh as 规格型号, rkcount as 数量 from #temprkreport order by rkcount
    go
      

  2.   

    就一个在C#里面得使用的例子,我可以把在C#添加一个临时表 但没办法正确调用SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
                        command.Fill(ds, "ds");调用使得这个方法Fill之前看数据库里 临时表是存在的 一旦Fill之时临时表消失,并抛出异常
      

  3.   

    添加临时表用的cmd.ExecuteNonQuery(); 没使用存储过程,是不是用存储过程更好一些
      

  4.   


    临时表如果是你通过语句
    比如:
    select * into #temptable from 你的表那么这个临时表在SQL server服务重启之前一直存在如果你是存储过程创建的,
    比如2楼,当存储过程调用完后,临时表也就消失了这是临时表的基制
      

  5.   

    using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    DataSet ds = new DataSet();
                    try
                    {
                        connection.Open();
                        SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
                        command.Fill(ds, "ds");
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    finally
                    {                    
                        connection.Close();
                    }
                    return ds;
                }
    我使用的这个方法调用临时表 按官方写的全局临时表只要有连接就不会消失的,可是调用的时候会提示临时表不存在
      

  6.   

    select * from ##tmpProducts 
      

  7.   

    ##tmpProducts确定名称没有错吧
    使用全局临时表的原因是多处调用临时表,我如果每次调用都重新添加一次临时表,这样会不会好一些呢不一定,看你用的多少了,一般都是用的时候再创建
      

  8.   

    还有一点:你需要注意一下,你的全局临时表如果在用程序创建的,那么执行完就会消失.如果是在SQL里执行的那么会保存.等服务重新后才消失.
      

  9.   

    还有一点:你需要注意一下,你的全局临时表如果在用程序创建的,那么断开数据库后就会消失.
    如果是在SQL里执行的那么会保存.等服务重新后才消失.
      

  10.   

    谢谢libinguest,SQL里执行改怎么弄啊?执行存储过程吗?可是由于我的tmptable每次都不一样,存储过程肯定也不一样啊,into ##tmptable的语句是拼出来的,怎样才能让他在sql里执行呢
      

  11.   

    拼出来的无所谓.存储过程,可以批语句.有多少,你依次写进去就OK
    例如:create proc testProc
    (
        
    )
    as
        select id from tableOne where name=名字用参数传递
        select .....
        update .....
        insert into ....go