存储过程取得参数的问题

???2008 2004-07-24 11:23:59



CREATE PROCEDURE baili_GetAuthority
(
@RoleID nvarchar,
@PageID int
)

AS

SELECT * from Authority WHERE RoleID IN (@RoleID) AND PageID = @PageID
GO
我调用该存储过程时,使用exec baili_GetAuthority "4,1", 2 时发现少了一些记录。我用
PRINT @RoleID
PRINT @PageID
查看一下参数情况,发现@RoleID只得到了"4"而后面的"1"少掉了。请问这个怎么解决?谢谢。

...全文
98 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2004-07-24
  • 打赏
  • 举报
回复
--or

CREATE PROCEDURE baili_GetAuthority
(
@RoleID nvarchar,
@PageID int
)

AS
declare @s varchar(8000)
set @s='SELECT * from Authority WHERE RoleID in('+@RoleID+') AND PageID = '+cast(@PageID as varchar)
exec(@s)
GO
zjcxc 元老 2004-07-24
  • 打赏
  • 举报
回复
CREATE PROCEDURE baili_GetAuthority
(
@RoleID nvarchar,
@PageID int
)

AS

SELECT * from Authority WHERE charindex(','+cast(RoleID as varchar)+',',','+@RoleID+',')>0 AND PageID = @PageID
GO
???2008 2004-07-24
  • 打赏
  • 举报
回复
4,1
2
服务器: 消息 245,级别 16,状态 1,过程 baili_GetAuthority,行 12
将 varchar 值 '4,1' 转换为数据类型为 int 的列时发生语法错误。
我想是由于WHERE RoleID IN("4,1")这样的格式出错的。
但是怎么转换为WHERE RoleID IN(4,1)呢?
zheninchangjiang 2004-07-24
  • 打赏
  • 举报
回复
CREATE PROCEDURE baili_GetAuthority
(
@RoleID nvarchar(3) , --len('4,1' )=3,在这种变量定义中,如果缺省长度,默认为 1
@PageID int
)
netcoder 2004-07-24
  • 打赏
  • 举报
回复
exec('SELECT * from Authority WHERE RoleID IN (' + @RoleID + ') AND PageID = ' + @PageID)

34,576

社区成员

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

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