有这样一个表,十个字段(col0->col9),要查询的只有3个字段(col0,col3,col8)--(实际可能是二十倍)
现在想到的方法有:
1、使用存储过程: SELECT * FROM [my_table] WHERE [id]=@id
然后根据获取到的DataSet再取出需要的3个字段
2、在程序中用字段组装一个SQL语句进行查询
SELECT [col0], [col3], [col8] FROM [my_table] WHERE [id]=@id
3、使用存储过程,在该存储过程中组装该SQL语句进行查询。
-------------------------------------------------------------------------------------------
个人想用第三种方法来实现,但是实在不知该如何来写这个存储过程,望有空的骚年帮忙建议/示例一下
万分感谢!!
------解决方案--------------------
DECLARE @s NVARCHAR(4000)
SET @s = ''
SELECT @s = @s + ',' + 'isnull('+QUOTENAME(name)+','''')'
FROM syscolumns
WHERE id = OBJECT_ID('表名')
AND name IN ( '希望显式的列' )
SET @s = STUFF(@s, 1, 1, '')
EXEC('select '+@s+' from 表名 ')
------解决方案--------------------
-- 假设@target_cols传参为"col0,col1,col5,col7" 的话,就需要字符串拆分
不拆分就变成了
name IN ( ‘col0,col1,col5,col7’ )
实际需要为
name IN ( 'col0','col1','col5','col7' )