当前位置: 代码迷 >> Sql Server >> MS SQL2008 查询数据表解决方法
  详细解决方案

MS SQL2008 查询数据表解决方法

热度:56   发布时间:2016-04-24 10:33:09.0
MS SQL2008 查询数据表
有这样一个表,十个字段(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 表名  ')

------解决方案--------------------
引用:
ALTER PROCEDURE [dbo].[mysp_query_record]
@id VarChar(32),
@target_cols VarChar(MAX)
AS

SET NOCOUNT ON
-- 如果@target_cols传参为"col0,col1,col5,col7"的话,是不是这样写就可以了?
EXEC('select '+@target_cols+' from [my_table] where [id] = ' + @id)

SET ANSI_NULLS OFF
SET QUOTED_IDENTIFIER OFF

GO


ALTER PROCEDURE [dbo].[mysp_query_record]
@id VarChar(32),
@target_cols VarChar(MAX)
AS

SET NOCOUNT ON
DECLARE @s NVARCHAR(4000)
SET @s = ''
SELECT  @s = @s + ',' + 'isnull('+QUOTENAME(name)+','''')'
FROM    syscolumns
WHERE   id = OBJECT_ID('[my_table]')
AND name  IN ( @target_cols )  -- 假设@target_cols传参为"col0,col1,col5,col7"
SET @s = STUFF(@s, 1, 1, '')
EXEC('select '+@s+' from [my_table]  ')  -- 查询的条件的话,是直接加到后面吗?比如:
 -- EXEC('select '+@s+' from [my_table] where [id] = ' + @id)
SET ANSI_NULLS OFF
SET QUOTED_IDENTIFIER OFF
GO

问题有点多啊 麻烦了~~~


-- 假设@target_cols传参为"col0,col1,col5,col7" 的话,就需要字符串拆分
不拆分就变成了
name  IN ( ‘col0,col1,col5,col7’ )

实际需要为
name  IN ( 'col0','col1','col5','col7' )
  相关解决方案