是这样的,我不知道这样表达的清楚不清楚数据(表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 一部传入的参数是有顺序的
还有一空(表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 一部传入的参数是有顺序的
@sql_string = 'select ' + @column(xingming) + ... + ' from table_name'
然后
exec @sql_string
就可以了。
555555555
大哥,没你说的那么简单吧
里面起码还有插入的顺序问题呢
panjinfu80(天蓝水晶)
帮小弟看看好吗,小弟郁闷的好难受啊
哪里没看懂,小弟再说出来
你按照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
那个aaa,bbb,ccc都是table中没有的列,正常我给as个列名,这样就好用了,但是这个组合语句中就出错了,假设传进去的是xingming,'无',nianling,'无','无',会查出什么呢,table里是没有'无'这个列的呀谢谢你,大哥,希望你能再帮帮我
处理后,@sql_string就变成:
select xingming,null,nianling,null,null from table_name
select '''1'''
然后exec(query string)
绝对可以,不过你写的不对,这里我提醒你一下,字符串变量的条件处理
比如:你说有字段是不存在的 ,那么你要这样写:
select @sql_string='select '
if isnull(@col1,'无')<>'无'
select @sql_string=@sql_string+@col1+','
else
select @sql_string=@sql_string+''''+'无'+''''+' as col1,'
......
你组合好@sql_string后,在exec前面使用
print @sql_string的方法,输出该组合string,然后copy到isqlw里面执行看看,就能找到
组合的是否正确了