如何把范围参数传入存储过程

RainStarNetwork 2010-09-03 05:27:11
有如下存储过程
CREATE PROCEDURE ras_AttLeaveRecordSelectUsersInSpanTime
UidList nvarchar(Max)= '*',
AS
SET NOCOUNT ON;
SELECT [NAME] FROM ([RIMS].[dbo].[ras_AttLeaveRecord] WHERE (UID in (@UidList )
想在外面传一个包含数字的字符串进来,如"1,2,3",然后达到查询UID在1~3范围内的人员的名字,但是这样明显不行,
问题是,如何在传入参数不变的情况下,处理传入的参数,能变成int范围的值放在where条件中
谢谢
...全文
99 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2010-09-03
  • 打赏
  • 举报
回复
CREATE PROCEDURE ras_AttLeaveRecordSelectUsersInSpanTime   
@UidList nvarchar(4000)= '*',

AS
SET NOCOUNT ON;
EXEC('SELECT [NAME] FROM ([RIMS].[dbo].[ras_AttLeaveRecord] WHERE (UID in ('+@UidList+' ) ')
SET NOCOUNT OFF;
RainStarNetwork 2010-09-03
  • 打赏
  • 举报
回复
1楼的方法我试了,不知道什么原因(不过二楼说行,估计是行的),没有成功,3楼的和4楼的我都试了,最后是用4的方法,稍加改动把结果先放到一个临时表再查临时(5楼的注意)
在这谢谢各位了
feilniu 2010-09-03
  • 打赏
  • 举报
回复
把参数拆分到表变量,再用IN查询。
喜-喜 2010-09-03
  • 打赏
  • 举报
回复
declare  @str  varchar(500),@aaa varchar(8000)

set @str='1,2,3'

set @aaa='select * from (select '''+REPLACE(@str,',',''' as str union all select ''')+''') a '
exec(@aaa)

/*
str
------
1
2
3
*/
王向飞 2010-09-03
  • 打赏
  • 举报
回复
CREATE PROCEDURE ras_AttLeaveRecordSelectUsersInSpanTime   
UidList nvarchar(Max)= '*',
AS
SET NOCOUNT ON;
declare @sql varchar(2000)
set @sql='SELECT [NAME] FROM ([RIMS].[dbo].[ras_AttLeaveRecord] WHERE (UID in ('''+replace (@UidList,',',''',''') +''')'
exec (@sql)
go
nalnait 2010-09-03
  • 打赏
  • 举报
回复
1、楼主可以看看精华帖的字符串的组合拆分
2、2楼解决方法
3、用charindex试试
wowo05 2010-09-03
  • 打赏
  • 举报
回复
定义个nvarchar 类型的变量
传入参数为 "‘[1]’,'[2]','[3]'"

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧