日期:2014-05-17  浏览次数:20529 次

SQL 书写技巧

有一个存储过程,有如下一条语句,其中 in后是一个从前天传递的参数,以下语句不用sp_executesql的动态语句,怎样写,谢谢!

select  * from ta  where deptID in (@s)


------解决方案--------------------
你传入的应该是一个用逗号分隔的字符串吧。
这样的话,要用一个表值函数把字符串分解,返回表。
类似这样:
总之In的后面是一只有一列的表。
这种函数网上很多。
Create proc t
(@custid varchar(10))
as 
begin
Select *
From Sales.Customers
Where custid in (Select 1 Union All Select 2 Union All Select 3);
end

------解决方案--------------------
1:你传递过来的参数直接就是in关键词需要的格式 value,value....
2:亦或者使用拼接的 union all 关键词。
3:如果传递的参数不是逗号隔开的话,使用函数进行处理
------解决方案--------------------
引用:
因为我传过来的参数,而不能动态语句sp_executesql去执行,所以应该用第三重方法,第一种与第二种是不可以的吧?

你如果一定不用动态SQL的话,可以参考

引用:
传入的是一个用逗号分隔的字符串。
谢谢你的提示

如果必须不用动态SQL的话,可以参考这个。http://www.cnblogs.com/shenyixin/archive/2011/08/26/2154115.html