您好,我在sql服务器程序中编写查询,在其中我用逗号分隔了nvarchar值,我想在sql服务器查询代码中过滤这些值,如下所示
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
这给了错误,请指导我有关此查询,谢谢。
字符串拆分的一种简单解决方案是将source(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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句