declare @sql varchar(4000) 
set @sql = 'select fUniqueID' 
select @sql = @sql + ',MAX(case fName when '''+fName+''' then fValue end) as '+fName 
from (select distinct fName from v_WebOA_FlowedMessage_File) as a 
set @sql = @sql+' from v_WebOA_FlowedMessage_File WHERE 条件 group by fUniqueID' 
exec(@sql)我用以上是说有错的。因为视图v_WebOA_FlowedMessage_File没有动态字段,郁闷!
虽然可以在程序逻辑用DATASET来处理可以得到结果,但我想直接传入参数来得到想要的结果,这样快点吧

解决方案 »

  1.   

    把B过程要查询的结果插入到永久##Temp临时表查中,然后在A过程查这个##Temp临时表就行了,用完删除掉##Temp......
      

  2.   

    在逻辑层是可以用DATASET来处理可以得到结果,但这样当数据很多时就否会很慢啊?
      

  3.   

    這麼試試  declare @sql varchar(4000) 
       set @sql = 'select fUniqueID' 
       select @sql = @sql + ',MAX(case fName when '''+fName+''' then fValue end) as '+fName 
       from (select distinct fName from v_WebOA_FlowedMessage_File) as a 
       set @sql = @sql+' Into ##Temp from v_WebOA_FlowedMessage_File group by fUniqueID' --這裡使用全局臨時表#Temp
       exec(@sql)--查詢
    Select * From ##Temp Where 条件 --刪除
    Drop Table ##Temp
      

  4.   

    #Temp 用255个字段 
    然后 根据 数据drop 不要的字段create table #tmp(F1 nvarchar(50),F2 nvarchar(50),F3 nvarchar(50))
    declare @d_sql varchar(200)
    //////////////////////////////
    set @d_sql='ALTER TABLE #tmp drop COLUMN F3'
    exec(@d_sql)
    select * from #tmp
    drop table #tmp或者 你一开始 就 动态 创建 临时表
      

  5.   

    解决,,谢谢paoluo(一天到晚游泳的鱼) !
      

  6.   

    以前我也是这样做过,但是我的临时表前面是一个#Temp,现在用##Temp才行。是不是这样才叫全局临时表啊?paoluo(一天到晚游泳的鱼)
      

  7.   

    wangtiecheng,啊?那不是要控制不能并发,这样性能会慢吧
      

  8.   

    那如果我根据不同用户创建不同的全局变量,到最后不是也全都销毁吗。这样就不存在这个并发问题。但不知这样性能会怎么样呢!谢谢wangtiecheng
      

  9.   

    谢谢,学到很多,如果不同用户创建不同临时表,和用lock来控制并发,这两种那个好点呢?
    wangtiecheng(不知不为过,不学就是错!)
      

  10.   

    如果不同的用户创建不同的临时表,就需要创建不同名字的临时表。用Lock控制不直观,用时,需要先判断是否存在这个临时表,如果存在且未被锁定,可以使用,否则等待。两种方式都不是太好,在前台处理最灵活。