日期:2014-05-18  浏览次数:20479 次

救证一句很简单但是不寻常的语句
如下   in   用法是正确的

select   *   from   数据表   where   字段名   in( '值1 ', '值2 ', '值3 ')

假如

CREATE   PROCEDURE   [dbo].[Mater]
(
        @Start   nvarchar(100)
)
AS
    select   *   from   数据表   where   字段名   in(@Start)
GO

而   '值1 ', '值2 ', '值3 '   是作为传入值给@Start的参数,如何让select语句正常查询出正确的结果?

------解决方案--------------------
CREATE PROCEDURE [dbo].[Mater]
(
@Start nvarchar(100)
)
AS
exec( 'select * from 数据表 where 字段名 in( '+@Start+ ') ')
GO
------解决方案--------------------
--这种情况应该用动态sql
CREATE PROCEDURE [dbo].[Mater]
(
@Start nvarchar(100)
)
AS
exec( 'select * from 数据表 where 字段名 in( '+@Start+ ') ')
--这句话相当于select * from 数据表 where 字段名 in( '值1 ', '值2 ', '值3 ' )
GO

--但是,你那个sql已经是动态的了,如果再这样写的话就是
exec( 'exec( ' '…… ' ') ')
这样的话,你那个存储过程又要改了。