是这样的,我不知道这样表达的清楚不清楚数据(表1)有30个列 xingming,nianling,xingbie,bianhao,danwei,......
还有一空(表2),主要来做临时表
共有16个列全是nvarchar(100)类型的值 col1 col2 col3 col4 col5.......col16问题,我现在需要写一个存储过程有16个参数,
传入的分别是(表1)的列名或一些字段-->(这个字段是表1没有的列名,这里我可以传入一些特别的字符如'无',这样在下面的语句中我就可以把他过滤掉,不用再查表了,这里没讲懂往下看回来再看这句 @_@!!),比如传入xingming,xingbie,danwei,aaa,bbb,ccc  --->这个是参数的值,而不是参数的名称
上面那句话的意思就是,这里传入的为xingming,xingbie,danwei,'无','无','无'
我就要把xingming,xingbie,danwei从(表1)查出来,aaa,bbb,ccc则成为空,插入到(表2)

格式为
xingming,xingbie,danwei,aaa,bbb,ccc
张三     男      一部   null null null
再比如传入xingming,aaa,nianling,bbb,ccc则从(表1)把xingming,nianling查出来,
aaa,bbb,ccc则还是空值插入到(表2)中
但插入后的列顺序还是xingming,aaa,nianling,bbb,ccc(这里就多了个顺序问题)
xingming,aaa,nianling,bbb,ccc
张三     null  20岁   null null
李四     null  21岁   null null或查 aaa,bbb,xingming,bianhao,danwei  插入(表2)
aaa,bbb,xingming,bianhao,danwei
null null 张三   10001   一部
null null 李四   10002   一部传入的参数是有顺序的

解决方案 »

  1.   

    你只需要把存储过程传入的参数组合成一个字符串:
    @sql_string = 'select ' + @column(xingming) + ... + ' from table_name'
    然后
    exec @sql_string
    就可以了。
      

  2.   

    freeliu() 
    555555555
    大哥,没你说的那么简单吧
    里面起码还有插入的顺序问题呢
    panjinfu80(天蓝水晶)
    帮小弟看看好吗,小弟郁闷的好难受啊
    哪里没看懂,小弟再说出来
      

  3.   

    你说得顺序有什么影响?
    你按照16个参数的顺序组合起来就行了。
    假设存储过程的参数是:@col1, @col2, @col3, ...
    那么:@sql_string = 'select ' + @col1 + ',' + @col2 + ',' + @col2 +  ... + ' from table_name'
    如果你传入的参数是xingming,aaa,nianling,bbb,ccc
    那么组合起来就是:select xingming,aaa,nianling,bbb,ccc from table_name
    如果传入的是aaa,bbb,xingming,bianhao,danwei 
    那么组合起来自然就是:select aaa,bbb,xingming,bianhao,danwei  from table_name
      

  4.   

    不可以的,我用查询分析器一直在试,这么组合,就会出错
    那个aaa,bbb,ccc都是table中没有的列,正常我给as个列名,这样就好用了,但是这个组合语句中就出错了,假设传进去的是xingming,'无',nianling,'无','无',会查出什么呢,table里是没有'无'这个列的呀谢谢你,大哥,希望你能再帮帮我
      

  5.   

    如果你传的是'无',那么就把这个无用单引号引起来,放在select里,它就自动作为常数,如果不引起来,y这个无就作为列名了,当然查不也来
      

  6.   

    你的'无'不是要改成null么?
    处理后,@sql_string就变成:
    select xingming,null,nianling,null,null from table_name
      

  7.   

    可以,你把这个放到查询分析器里分析一下,看看结果,然后琢磨一下
    select '''1'''
      

  8.   

    先自己组合sql 的query string
    然后exec(query string)
    绝对可以,不过你写的不对,这里我提醒你一下,字符串变量的条件处理
    比如:你说有字段是不存在的 ,那么你要这样写:
     select @sql_string='select '
     if isnull(@col1,'无')<>'无'
        select @sql_string=@sql_string+@col1+','
     else
        select @sql_string=@sql_string+''''+'无'+''''+' as col1,'
     ......
      

  9.   

    还有个比较好的调试办法!
    你组合好@sql_string后,在exec前面使用
    print @sql_string的方法,输出该组合string,然后copy到isqlw里面执行看看,就能找到
    组合的是否正确了