传递一参数  返回一SQL查询sql语句如下select bdp_name,bdp_num,yqghsj,bdp_desc,(select '标项'+rtrim((select count(distinct bdp_fzid) from bid_detailed_plan where bdp_fzid<b.bdp_fzid))) bx,bdp_fzid,a.bi_id,a.bi_endbmtime,'' flag from bid_item a inner join bid_detailed_plan b on a.bi_id=b.bdp_pid where a.bi_id = '20070202131249' order by bdp_fzid
要传递bi_id参数还要对上面SQL查询的纪录再操作
语法 好像INTO T 不太清楚然后返回操作完的T

解决方案 »

  1.   

    我先写个简单的
    create procedure pro_wjfz@bi_id varchar(15) 
    as
    declare @cur_col varchar(30)
    declare @sql varchar(8000)
    set @sql='select bdp_name,bdp_num,yqghsj,bdp_desc,(select '标项'+rtrim((select count(distinct bdp_fzid) from bid_detailed_plan where bdp_fzid<b.bdp_fzid))) bx,bdp_fzid,a.bi_id,a.bi_endbmtime, flag=(case when exists(select 1 from bid_price c where bp_salerid='"&session("user_id")&" and b.bdp_id=c.bp_comcode') then '已报价' else '未报价' end) from bid_item a inner join bid_detailed_plan b on a.bi_id=b.bdp_pid where a.bi_id = @bi_id order by bdp_fzid'--print @sql
    exec(@sql)
    GO为什么报错?
    服务器: 消息 170,级别 15,状态 1,过程 pro_wjfz,行 7
    第 7 行: '标项' 附近有语法错误。
      

  2.   


    --动态SQL中,两个''代表一个'
    create procedure pro_wjfz@bi_id varchar(15) 
    as
    declare @cur_col varchar(30)
    declare @sql varchar(8000)
    set @sql='select bdp_name,bdp_num,yqghsj,bdp_desc,(select ''标项''+rtrim((select count(distinct bdp_fzid) from bid_detailed_plan where bdp_fzid<b.bdp_fzid))) bx,bdp_fzid,a.bi_id,a.bi_endbmtime, flag=(case when exists(select 1 from bid_price c where bp_salerid='"&session("user_id")&" and b.bdp_id=c.bp_comcode') then ''已报价'' else ''未报价' 'end) from bid_item a inner join bid_detailed_plan b on a.bi_id=b.bdp_pid where a.bi_id = @bi_id order by bdp_fzid'--print @sql
    exec(@sql)
    GO
      

  3.   

    SQL Server不支持session函数,且字符串连接符用+,而不是&
      

  4.   

    发现要传2个参数
    create procedure pro_wjfz@bi_id varchar(15)
    @gys_id varchar(50) 
    as
    declare @cur_col varchar(30)
    declare @sql varchar(8000)
    set @sql='select bdp_name,bdp_num,yqghsj,bdp_desc,(select ''标项''+rtrim((select count(distinct bdp_fzid) from bid_detailed_plan where bdp_fzid<b.bdp_fzid))) bx,bdp_fzid,a.bi_id,a.bi_endbmtime, flag=(case when exists(select 1 from bid_price c where bp_salerid=@gys_id and b.bdp_id=c.bp_comcode) then ''已报价'' else ''未报价'' end) from bid_item a inner join bid_detailed_plan b on a.bi_id=b.bdp_pid where a.bi_id = @bi_id order by bdp_fzid'--print @sql
    exec(@sql)
    GO报
    服务器: 消息 170,级别 15,状态 1,过程 pro_wjfz,行 4
    第 4 行: '@gys_id' 附近有语法错误。
      

  5.   

    谢谢wangtiecheng(不知不为过,不学就是错!) 提醒  现在改成传参了,但那边还报错
      

  6.   

    OK少个, 继续问,呵呵T-SQL 把查询纪录附给新表是不是set @sql into t ?
      

  7.   

    select *
    into 新表名
    from 表名
      

  8.   

    如果是动态SQL追加到临时表中,需要先创建临时表,再在动态SQL追加到这个临时表中。
      

  9.   

    在T-SQL中
    如上面语句
    假如SQL查询得到如下
    z1  z2   z3   z4
    1   2    2    2
    1   2    2    2
    1   2    2    2
    1   2    2    2
    我想把它附与新表以便再操作,T-SQL如何写?
      

  10.   

    如果是动态SQL追加到临时表中,需要先创建临时表,再在动态SQL追加到这个临时表中。具体如何写,请给个示例。。
      

  11.   

    create table #t(c1 int, c2 int)declare @sql varchar(8000)set @sql ='insert into #t select ...'
    exec (@sql)
    select * from #t
      

  12.   

    那么在我上面是不是这样写create table #t   这边可以不定义字段么?
    declare @sqt varchar(8000)
    set @sqt=''insert into #t exec (@sql)'
    exec (@sqt)select * from #t
    我的写法对不?还有返回查询的结果集后,怎么再销毁这个临时表?
      

  13.   

    创建临时表时,需要指定字段。销毁临时表drop table #t
      

  14.   

    在存储过程中用动态SQL创建函数。
      

  15.   

    如何在查询分析器查询存储结果??如上面存储过程名pro_wjfz   传递的参数有2个我这样写报错
    exec pro_wjfz('123','123')
      

  16.   

    exec pro_wjfz '123','123'
      

  17.   

    奇怪 我的语法没有问题
    但传递参数进去却报了服务器: 消息 137,级别 15,状态 2,行 1
    必须声明变量 '@sql'。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: ',' 附近有语法错误。
    存储如下
    create procedure pro_wjfz@bi_id varchar(15),
    @gys_id varchar(50) 
    as
    declare @cur_col varchar(30)
    declare @sql varchar(8000)
    declare @sql_l varchar(8000)
    declare @sqt varchar(8000)
    set @sql='select bdp_name,bdp_num,yqghsj,bdp_desc,(select ''标项''+rtrim((select count(distinct bdp_fzid) from bid_detailed_plan where bdp_fzid<b.bdp_fzid))) bx,bdp_fzid,a.bi_id,a.bi_endbmtime, flag=(case when exists(select 1 from bid_price c where bp_salerid=@gys_id and b.bdp_id=c.bp_comcode) then ''已报价'' else ''未报价'' end) from bid_item a inner join bid_detailed_plan b on a.bi_id=b.bdp_pid where a.bi_id = @bi_id order by bdp_fzid'--print @sql
    create table #l_wjfz(bdp_name varchar(200),bdp_num varchar(200),yqghsj datetime,bdp_desc varchar(2000),bx varchar(20),bdp_fzid varchar(50),bi_id varchar(50),bi_endbmtime datetime,flag varchar(50))
    set @sql_l='insert #l_wjfz exec(@sql)'
    exec(@sql_l)
    set @sqt='select bdp_name=(dbo.fun_wjfz(bx,1),bdp_num=(dbo.fun_wjfz(bx,2),yqghsj=(dbo.fun_wjfz(bx,3)),bdp_desc=(dbo.fun_wjfz(bx,4)),bx,flag from l_wjfz group by bx'--print @sqt
    exec(@sqt)
    drop table #l_wjfzGO
      

  18.   

    --改为如下:
    create procedure pro_wjfz@bi_id varchar(15),
    @gys_id varchar(50) 
    as
    declare @cur_col varchar(30)
    declare @sql varchar(8000)
    declare @sql_l varchar(8000)
    declare @sqt varchar(8000)create table #l_wjfz(bdp_name varchar(200),bdp_num varchar(200),yqghsj datetime,bdp_desc varchar(2000),bx varchar(20),bdp_fzid varchar(50),bi_id varchar(50),bi_endbmtime datetime,flag varchar(50))set @sql='
    insert into #l_wjfz (bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag)
    select bdp_name,bdp_num,yqghsj,bdp_desc,(select ''标项''+rtrim((select count(distinct bdp_fzid) from bid_detailed_plan where bdp_fzid<b.bdp_fzid))) bx,bdp_fzid,a.bi_id,a.bi_endbmtime, flag=(case when exists(select 1 from bid_price c where bp_salerid=@gys_id and b.bdp_id=c.bp_comcode) then ''已报价'' else ''未报价'' end) from bid_item a inner join bid_detailed_plan b on a.bi_id=b.bdp_pid where a.bi_id = @bi_id order by bdp_fzid'--print @sqlexec(@sql)
    set @sqt='select bdp_name=(dbo.fun_wjfz(bx,1),bdp_num=(dbo.fun_wjfz(bx,2),yqghsj=(dbo.fun_wjfz(bx,3)),bdp_desc=(dbo.fun_wjfz(bx,4)),bx,flag from l_wjfz group by bx'--print @sqt
    exec(@sqt)
    drop table #l_wjfzGO
      

  19.   

    按你的缺又报
    服务器: 消息 137,级别 15,状态 2,行 9
    必须声明变量 '@gys_id'。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: ',' 附近有语法错误。
    汗!
      

  20.   

    create procedure pro_wjfz@bi_id varchar(15),
    @gys_id varchar(50) 
    as
    declare @cur_col varchar(30)
    declare @sql varchar(8000)
    declare @sqt varchar(8000)
    set @sql='select bdp_name,bdp_num,yqghsj,bdp_desc,(select ''标项''+rtrim((select count(distinct bdp_fzid) from bid_detailed_plan where bdp_fzid<b.bdp_fzid))) bx,bdp_fzid,a.bi_id,a.bi_endbmtime, flag=(case when exists(select 1 from bid_price c where bp_salerid=@gys_id and b.bdp_id=c.bp_comcode) then ''已报价'' else ''未报价'' end) from bid_item a inner join bid_detailed_plan b on a.bi_id=b.bdp_pid where a.bi_id = @bi_id order by bdp_fzid'--print @sqlexec(@sql)
    goexec pro_wjfz '20070202131249','20070123132333'

    服务器: 消息 137,级别 15,状态 2,行 7
    必须声明变量 '@gys_id'。我上面不是声明了吗?
      

  21.   

    --改为如下:
    create procedure pro_wjfz@bi_id varchar(15),
    @gys_id varchar(50) 
    as
    declare @cur_col varchar(30)
    declare @sql varchar(8000)
    declare @sql_l varchar(8000)
    declare @sqt varchar(8000)create table #l_wjfz(bdp_name varchar(200),bdp_num varchar(200),yqghsj datetime,bdp_desc varchar(2000),bx varchar(20),bdp_fzid varchar(50),bi_id varchar(50),bi_endbmtime datetime,flag varchar(50))set @sql='
    insert into #l_wjfz (bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag)
    select bdp_name,bdp_num,yqghsj,bdp_desc,(select ''标项''+rtrim((select count(distinct bdp_fzid) from bid_detailed_plan where bdp_fzid<b.bdp_fzid))) bx,bdp_fzid,a.bi_id,a.bi_endbmtime, flag=(case when exists(select 1 from bid_price c where bp_salerid=''' + @gys_id + ''' and b.bdp_id=c.bp_comcode) then ''已报价'' else ''未报价'' end) from bid_item a inner join bid_detailed_plan b on a.bi_id=b.bdp_pid where a.bi_id = ''' + @bi_id + ''' order by bdp_fzid'--print @sqlexec(@sql)
    set @sqt='select bdp_name=(dbo.fun_wjfz(bx,1),bdp_num=(dbo.fun_wjfz(bx,2),yqghsj=(dbo.fun_wjfz(bx,3)),bdp_desc=(dbo.fun_wjfz(bx,4)),bx,flag from l_wjfz group by bx'--print @sqt
    exec(@sqt)
    drop table #l_wjfzGO  
      

  22.   

    逐个@sql打印出来,检查错误在哪儿。没有表结构,不好调试。
      

  23.   

    set @sqt='select bdp_name=(dbo.fun_wjfz(bx,1),bdp_num=(dbo.fun_wjfz(bx,2),yqghsj=(dbo.fun_wjfz(bx,3)),bdp_desc=(dbo.fun_wjfz(bx,4)),bx,flag from l_wjfz group by bx'-->少了2个)
    set @sqt='select bdp_name=(dbo.fun_wjfz(bx,1)),bdp_num=(dbo.fun_wjfz(bx,2)),yqghsj=(dbo.fun_wjfz(bx,3)),bdp_desc=(dbo.fun_wjfz(bx,4)),bx,flag from l_wjfz group by bx'
      

  24.   

    create function fun_wjfz(@bx varchar(20), @flag int)
    returns varchar(2000)
    as
    begin
    declare @re varchar(2000)
    set @re=''
    if @flag=1
    select @re=@re+','+bdp_name from l_wjfz where bx=@bx
    else if @flag=2
    select @re=@re+','+bdp_num from l_wjfz where bx=@bx
    else if @flag=3
    select @re=@re+','+yqghsj from l_wjfz where bx=@bx
    else if @flag=4
    select @re=@re+','+bdp_desc from l_wjfz where bx=@bxreturn(stuff(@re, 1, 1,  '')) 
    end加上上面的存储把括号加上去之后,现在 报
    服务器: 消息 208,级别 16,状态 1,行 1
    对象名 'l_wjfz' 无效。是不是我这个函数用的临时表导致的问题?
      

  25.   

    如何把这段函数加到存储中,T-SQL?怎么写?
      

  26.   

    函数就是一组T-SQL的集合,不能在存储过程中存在,可以使用游标处理上述业务要求。
      

  27.   

    我想把这段直接加进存储中去
    create function fun_wjfz(@bx varchar(20), @flag int)
    returns varchar(2000)
    as
    begin
    declare @re varchar(2000)
    set @re=''
    if @flag=1
    select @re=@re+','+bdp_name from l_wjfz where bx=@bx
    else if @flag=2
    select @re=@re+','+bdp_num from l_wjfz where bx=@bx
    else if @flag=3
    select @re=@re+','+yqghsj from l_wjfz where bx=@bx
    else if @flag=4
    select @re=@re+','+bdp_desc from l_wjfz where bx=@bxreturn(stuff(@re, 1, 1,  '')) 
    end
      

  28.   

    SORRY,不是我不明白你的意思,而是我不会用SQL的游标
      

  29.   

    --示例
    create table #t(bx int,name varchar(100))insert into #t(bx,name) select 1,'a'
    insert into #t(bx,name) select 1,'b'
    insert into #t(bx,name) select 1,'c'
    insert into #t(bx,name) select 2,'aa'
    insert into #t(bx,name) select 2,'bb'create table #t2(bx int, name varchar(100))insert into #t2(bx,name)
    select bx,null
    from #t
    group by bxdeclare test_cursor cursor
    read_only
    for select bx,[name] from #tdeclare @bx int,@name varchar(100)
    open test_cursorfetch next from test_cursor into @bx,@name
    while (@@fetch_status =0)
    begin
    update #t2 set name = isnull(name,'') + ',' + @name where bx=@bx
    fetch next from test_cursor into @bx,@name
    endclose test_cursor
    deallocate test_cursor
    goupdate #t2 set name=right(name,len(name)-1)select * from #t
    select * from #t2drop table #t,#t2/*
    1 a
    1 b
    1 c
    2 aa
    2 bb
    1 a,b,c
    2 aa,bb
    */
      

  30.   

    CREATE procedure pro_wjfz
    @bi_id varchar(15),
    @gys_id varchar(50) 
    asdeclare @sql varchar(8000)
    declare @sql_l varchar(8000)
    declare @sqt varchar(8000)create table #l_wjfz(bdp_name varchar(200),bdp_num varchar(200),yqghsj datetime,bdp_desc varchar(2000),bx varchar(20),bdp_fzid varchar(50),bi_id varchar(50),bi_endbmtime datetime,flag varchar(50))set @sql='
    insert into #l_wjfz (bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag)
    select bdp_name,bdp_num,yqghsj,bdp_desc,(select ''标项''+rtrim((select count(distinct bdp_fzid) from bid_detailed_plan where bdp_fzid<b.bdp_fzid))) bx,bdp_fzid,a.bi_id,a.bi_endbmtime, flag=(case when exists(select 1 from bid_price c where bp_salerid=''' + @gys_id + ''' and b.bdp_id=c.bp_comcode) then ''已报价'' else ''未报价'' end) from bid_item a inner join bid_detailed_plan b on a.bi_id=b.bdp_pid where a.bi_id = ''' + @bi_id + ''' order by bdp_fzid'--print @sqlexec(@sql)create table #t2(bdp_name varchar(200),bdp_num varchar(200),yqghsj varchar(2000),bdp_desc varchar(2000),bx varchar(20),bdp_fzid varchar(50),bi_id varchar(50),bi_endbmtime datetime,flag varchar(50))
    insert into #t2(bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag)
    select bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag 
    from #l_wjfz
    group by bxdeclare cur_col cursor
    read_only
    for select bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag from #l_wjfzdeclare @bx int,@bdp_name varchar(2000),@bdp_num varchar(2000),@yqghsj varchar(2000),@bdp_desc varchar(2000), @bdp_fzid varchar(50),@bi_endbmtime datetime,@flag varchar(50)
    open cur_colfetch next from cur_col into @bdp_name,@bdp_num,@yqghsj,@bdp_desc,@bx,@bdp_fzid,@bi_id,@bi_endbmtime,@flag
    while (@@fetch_status =0)
    begin
    update #t2 set bdp_name = isnull(bdp_name,'') + ',' + @bdp_name,bdp_num = isnull(bdp_num,'') + ',' + @bdp_num,yqghsj = isnull(yqghsj,'') + ',' + @yqghsj,bdp_desc = isnull(bdp_desc,'') + ',' + @bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag where bx=@bx
    fetch next from test_cursor into @bdp_name,@bdp_num,@yqghsj,@bdp_desc,@bx,@bdp_fzid,@bi_id,@bi_endbmtime,@flag
    endclose cur_col
    deallocate cur_col
    update #t2 set bdp_name=right(bdp_name,len(bdp_name)-1),bdp_num=right(bdp_num,len(bdp_num)-1),yqghsj=right(yqghsj,len(yqghsj)-1),bdp_desc=right(bdp_desc,len(bdp_desc)-1)
    set @sqt='select * from #t2'
    exec @sqt
    drop table #l_wjfz,#t2go
    硬套出来报
    服务器: 消息 170,级别 15,状态 1,过程 pro_wjfz,行 60
    第 60 行: ',' 附近有语法错误。
    while (@@fetch_status =0)
      

  31.   

    exec @sqt
    -->exec (@sqt)   --一定要加()
      

  32.   

    服务器: 消息 170,级别 15,状态 1,过程 pro_wjfz,行 60
    第 60 行: ',' 附近有语法错误。
    while (@@fetch_status =0)
    可这个报的什么错?
      

  33.   

    update #t2 set bdp_name = isnull(bdp_name,'') + ',' + @bdp_name,bdp_num = isnull(bdp_num,'') + ',' + @bdp_num,yqghsj = isnull(yqghsj,'') + ',' + @yqghsj,bdp_desc = isnull(bdp_desc,'') + ',' + @bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag where bx=@bx-----------------------这条语句只写了一半
      

  34.   

    bx,bdp_fzid,bi_id,bi_endbmtime,flag     --?这些字段?
      

  35.   

    这些无须连在一起
    去掉之后 
    CREATE procedure pro_wjfz
    @bi_id varchar(15),
    @gys_id varchar(50) 
    asdeclare @sql varchar(8000)
    declare @sql_l varchar(8000)
    declare @sqt varchar(8000)create table #l_wjfz(bdp_name varchar(200),bdp_num varchar(200),yqghsj datetime,bdp_desc varchar(2000),bx varchar(20),bdp_fzid varchar(50),bi_id varchar(50),bi_endbmtime datetime,flag varchar(50))set @sql='
    insert into #l_wjfz (bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag)
    select bdp_name,bdp_num,yqghsj,bdp_desc,(select ''标项''+rtrim((select count(distinct bdp_fzid) from bid_detailed_plan where bdp_fzid<b.bdp_fzid))) bx,bdp_fzid,a.bi_id,a.bi_endbmtime, flag=(case when exists(select 1 from bid_price c where bp_salerid=''' + @gys_id + ''' and b.bdp_id=c.bp_comcode) then ''已报价'' else ''未报价'' end) from bid_item a inner join bid_detailed_plan b on a.bi_id=b.bdp_pid where a.bi_id = ''' + @bi_id + ''' order by bdp_fzid'--print @sqlexec(@sql)create table #t2(bdp_name varchar(200),bdp_num varchar(200),yqghsj varchar(2000),bdp_desc varchar(2000),bx varchar(20),bdp_fzid varchar(50),bi_id varchar(50),bi_endbmtime datetime,flag varchar(50))
    insert into #t2(bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag)
    select bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag 
    from #l_wjfz
    group by bx,bdq_name,bdp_num,yqghsj,bdp_desc,bdp_fzid,bi_id,bi_endbmtime,flagdeclare cur_col cursor
    read_only
    for select bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag from #l_wjfzdeclare @bx int,@bdp_name varchar(2000),@bdp_num varchar(2000),@yqghsj varchar(2000),@bdp_desc varchar(2000), @bdp_fzid varchar(50),@bi_endbmtime datetime,@flag varchar(50)
    open cur_colfetch next from cur_col into @bdp_name,@bdp_num,@yqghsj,@bdp_desc,@bx,@bdp_fzid,@bi_id,@bi_endbmtime,@flag
    while (@@fetch_status =0)
    begin
    update #t2 set bdp_name = isnull(bdp_name,'') + ',' + @bdp_name,bdp_num = isnull(bdp_num,'') + ',' + @bdp_num,yqghsj = isnull(yqghsj,'') + ',' + @yqghsj,bdp_desc = isnull(bdp_desc,'') + ',' + @bdp_desc where bx=@bx
    fetch next from test_cursor into @bdp_name,@bdp_num,@yqghsj,@bdp_desc,@bx,@bdp_fzid,@bi_id,@bi_endbmtime,@flag
    endclose cur_col
    deallocate cur_col
    update #t2 set bdp_name=right(bdp_name,len(bdp_name)-1),bdp_num=right(bdp_num,len(bdp_num)-1),yqghsj=right(yqghsj,len(yqghsj)-1),bdp_desc=right(bdp_desc,len(bdp_desc)-1)
    set @sqt='select * from #t2'
    exec(@sqt)
    drop table #l_wjfz,#t2
    GO(所影响的行数为 15 行)服务器: 消息 207,级别 16,状态 3,过程 pro_wjfz,行 39
    列名 'bdq_name' 无效。
      

  36.   

    这些无须连在一起
    去掉之后 
    CREATE procedure pro_wjfz
    @bi_id varchar(15),
    @gys_id varchar(50) 
    asdeclare @sql varchar(8000)
    declare @sql_l varchar(8000)
    declare @sqt varchar(8000)create table #l_wjfz(bdp_name varchar(200),bdp_num varchar(200),yqghsj datetime,bdp_desc varchar(2000),bx varchar(20),bdp_fzid varchar(50),bi_id varchar(50),bi_endbmtime datetime,flag varchar(50))set @sql='
    insert into #l_wjfz (bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag)
    select bdp_name,bdp_num,yqghsj,bdp_desc,(select ''标项''+rtrim((select count(distinct bdp_fzid) from bid_detailed_plan where bdp_fzid<b.bdp_fzid))) bx,bdp_fzid,a.bi_id,a.bi_endbmtime, flag=(case when exists(select 1 from bid_price c where bp_salerid=''' + @gys_id + ''' and b.bdp_id=c.bp_comcode) then ''已报价'' else ''未报价'' end) from bid_item a inner join bid_detailed_plan b on a.bi_id=b.bdp_pid where a.bi_id = ''' + @bi_id + ''' order by bdp_fzid'--print @sqlexec(@sql)create table #t2(bdp_name varchar(200),bdp_num varchar(200),yqghsj varchar(2000),bdp_desc varchar(2000),bx varchar(20),bdp_fzid varchar(50),bi_id varchar(50),bi_endbmtime datetime,flag varchar(50))
    insert into #t2(bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag)
    select bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag 
    from #l_wjfz--这里字段名bdq_name写错了
    group by bx,bdq_name,bdp_num,yqghsj,bdp_desc,bdp_fzid,bi_id,bi_endbmtime,flag  declare cur_col cursor
    read_only
    for select bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag from #l_wjfzdeclare @bx int,@bdp_name varchar(2000),@bdp_num varchar(2000),@yqghsj varchar(2000),@bdp_desc varchar(2000), @bdp_fzid varchar(50),@bi_endbmtime datetime,@flag varchar(50)
    open cur_colfetch next from cur_col into @bdp_name,@bdp_num,@yqghsj,@bdp_desc,@bx,@bdp_fzid,@bi_id,@bi_endbmtime,@flag
    while (@@fetch_status =0)
    begin
    update #t2 set bdp_name = isnull(bdp_name,'') + ',' + @bdp_name,bdp_num = isnull(bdp_num,'') + ',' + @bdp_num,yqghsj = isnull(yqghsj,'') + ',' + @yqghsj,bdp_desc = isnull(bdp_desc,'') + ',' + @bdp_desc where bx=@bx
    fetch next from test_cursor into @bdp_name,@bdp_num,@yqghsj,@bdp_desc,@bx,@bdp_fzid,@bi_id,@bi_endbmtime,@flag
    endclose cur_col
    deallocate cur_col
    update #t2 set bdp_name=right(bdp_name,len(bdp_name)-1),bdp_num=right(bdp_num,len(bdp_num)-1),yqghsj=right(yqghsj,len(yqghsj)-1),bdp_desc=right(bdp_desc,len(bdp_desc)-1)
    set @sqt='select * from #t2'
    exec(@sqt)
    drop table #l_wjfz,#t2
    GO
      

  37.   

    from #l_wjfz--这里字段名bdq_name写错了,应该为bdp_name
    group by bx,bdq_name,bdp_num,yqghsj,bdp_desc,bdp_fzid,bi_id,bi_endbmtime,flag  这些错误,楼主自己就应该检查出来了。
      

  38.   

    游标有问题
    第一个SQL查询的纪录为15条
    2
    4
    5
    4
    也就是4个标项但是用游标处理过之后
    却变成
    3
    5
    6
    5而且用right少了个字符BM计算机,IBM计算机,IBM计算机 ,1,1 1 31 2007 12:00AM,01 31 2007 12:00AM,01 31 2007 12:00AM 67576,567576,567576
    BM计算机,IBM计算机,IBM计算机,IBM计算机,IBM计算机 ,1,1,1,1 1 31 2007 12:00AM,01 31 2007 12:00AM,01 31 2007 12:00AM,01 31 2007 12:00AM,01 31 2007 12:00AM 67576,567576,567576,567576,567576
    BM计算机,IBM计算机,IBM计算机,IBM计算机,IBM计算机,IBM计算机 ,1,1,1,1,1 1 31 2007 12:00AM,01 31 2007 12:00AM,01 31 2007 12:00AM,01 31 2007 12:00AM,01 31 2007 12:00AM,01 31 2007 12:00AM 67576,567576,567576,567576,567576,567576
    BM计算机,IBM计算机,IBM计算机,IBM计算机,IBM计算机 ,1,1,1,1 1 31 2007 12:00AM,01 31 2007 12:00AM,01 31 2007 12:00AM,01 31 2007 12:00AM,01 31 2007 12:00AM 67576,567576,567576,567576,567576
      

  39.   

    no。肯定是你的代码问题。insert into #t2(bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag)
    select bdp_name,bdp_num,yqghsj,bdp_desc,bx,bdp_fzid,bi_id,bi_endbmtime,flag 
    from #l_wjfz
    group by bx,bdq_name,bdp_num,yqghsj,bdp_desc,bdp_fzid,bi_id,bi_endbmtime,flag  -->
    insert into #t2(bx)
    select bx
    from #l_wjfz
    group by bx
      

  40.   

    create table #t(...)insert into #t exec 存储过程名 参数列表select * from #t
      

  41.   

    赞一个  wangtiecheng(不知不为过,不学就是错!)  热心