如何使用分隔符拆分字符串并转换为整数

时间:2014-02-22 13:52:17

标签: sql sql-server sql-server-2008 stored-procedures

您好我在sql server程序中编写查询,其中我传递了逗号分隔的nvarchar值我想在sql server查询代码中过滤这些值,如下所示

declare @RoleId NVARCHAR(MAX) = '1,2,3'
Declare @RoleTempId  int;
Set @RoleTempId = Cast(@RoleId As INT);
BEGIN
SELECT        dbo.RolePermission.PermissionId, dbo.Permission.PermissionName
FROM            dbo.RolePermission INNER JOIN
                         dbo.Permission ON dbo.RolePermission.PermissionId = dbo.Permission.PermissionId
WHERE        (dbo.RolePermission.RoleId IN (@RoleTempId))
END

这是错误请指导我这个查询谢谢。

1 个答案:

答案 0 :(得分:2)

字符串拆分的一个简单解决方案是转换源(1,2,3)字符串(可以声明为VARCHAR而不是NVARCHAR 如果它包含只有整数)到XML(<r>1</r><r>2</r><r>3</r>)然后你可以粉碎这个XML并将每个值(整数)插入一个表变量:

DECLARE @RoleId NVARCHAR(MAX) = '1,2,3'

DECLARE @SelectedRoles TABLE (RoleId INT PRIMARY KEY); -- No duplicates allowed

DECLARE @x XML;
SET @x = N'<r>' + REPLACE((SELECT @RoleId FOR XML PATH('')), N',', N'</r><r>') + N'</r>';
/*
@x content:
<r>1</r><r>2</r><r>3</r>
*/
INSERT  @SelectedRoles (RoleId)
SELECT  y.XmlCol.value('(.)', 'INT') AS RoleId
FROM    @x.nodes('/r') y(XmlCol);

...
WHERE        (dbo.RolePermission.RoleId IN (SELECT sr.RoleId FROM @SelectedRoles sr))