2014-02-22 168 views
0

在SQL Server程序你好我寫的查詢中,我通過逗號seprated 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 
給出

這是給錯誤,請指導我關於此查詢謝謝。

+0

指這個,HTTP://stackoverflow.com/questions/2647/split-string-in-sql – KumarHarsh

回答

2

一個字符串分割簡單的解決方案是將源轉換(1,2,3)字符串(這可能被宣佈爲VARCHAR,而不是NVARCHAR如果只包含整數)以XML(<r>1</r><r>2</r><r>3</r>),然後你可以shredd這個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)) 
+0

這給了我重複我的權限如何解決這個@ Bogdan Sahlean – Ammar

+0

@Ammar:[1]你必須避免重複的角色:'1,2,3,3' - >'1,2,3'或[2]喲你可以刪除'PRIMARY KEY'約束:'TABLE(RoleId INT)' –

+0

非常感謝你。 – Ammar

相關問題