2017-02-13 94 views
0

場景:我需要準備許可矩陣的excel表單文檔。在應用程序中共有15個角色和20個模塊,使用用戶定義的函數來傳遞roleid和moduleid,我可以獲得單個角色的權限詳細信息,並且可以複製並粘貼到Excel表單中。將多個結果集合到一個表中

但今後,我會重複同樣的任務300次。爲了減少工作,我打算將所有角色的權限以模塊方式結合起來。所以我只能做20次這個任務。

我試過了什麼:我已經創建了一個UDF函數來將逗號分隔的結果從SP拆分爲列明智的。同時創建20個變量以表格格式存儲每個角色的權限詳細信息。

示例數據和表:考慮每個@UDF_Function存儲每個角色的權限詳細信息,我想以單個表格格式顯示所有結果。

DECLARE @UDF_Function1 TABLE (Details VARCHAR (10)); 
INSERT INTO @UDF_Function1 (Details) 
SELECT 'hidden' UNION ALL SELECT 'edit' UNION ALL SELECT 'edit'; 

DECLARE @UDF_Function2 TABLE (Details VARCHAR (10)); 
INSERT INTO @UDF_Function2 (Details) 
SELECT 'view' UNION ALL SELECT 'edit' UNION ALL SELECT 'view'; 

-- SELECT * FROM @UDF_Function1; 
-- SELECT * FROM @UDF_Function2; 

SELECT F1.Details AS R1, F2.Details AS R2 FROM 
(SELECT * FROM @UDF_Function1) F1, 
(SELECT * FROM @UDF_Function2) F2; 

輸出結果不符合我的預期格式,如何才能達到預期的格式,如下所示?

預期結果

| R1  | R2  | 
|---------------------| 
| hidden | view | 
| edit  | edit | 
| edit  | view | 

我的是SQL Server 2012的

回答

1

試試這個

DECLARE @UDF_Function1 TABLE (id int identity,Details VARCHAR (10)); 
INSERT INTO @UDF_Function1 (Details) 
SELECT 'hidden' UNION ALL SELECT 'edit' UNION ALL SELECT 'edit'; 

DECLARE @UDF_Function2 TABLE (id int identity,Details VARCHAR (10)); 
INSERT INTO @UDF_Function2 (Details) 
SELECT 'view' UNION ALL SELECT 'edit' UNION ALL SELECT 'view'; 


SELECT F1.Details AS R1, F2.Details AS R2 FROM 
(SELECT * FROM @UDF_Function1) F1, 
(SELECT * FROM @UDF_Function2) F2 WHERE F1.id=F2.id; 

在你的查詢,你需要加入WHERE子句我所提供的條件使用自發生標識列id。 不存在連接條件兩個表的行之間的笛卡爾乘積正在發生,給出的行數多於所需的結果數量。

+0

返回我期望的結果,謝謝。 – Arulkumar

1

添加標識列,並做了簡單的加入

DECLARE @UDF_Function1 TABLE (id int identity,Details VARCHAR (10)); 
INSERT INTO @UDF_Function1 (Details) 
SELECT 'hidden' UNION ALL SELECT 'edit' UNION ALL SELECT 'edit'; 

DECLARE @UDF_Function2 TABLE (id int identity,Details VARCHAR (10)); 
INSERT INTO @UDF_Function2 (Details) 
SELECT 'view' UNION ALL SELECT 'edit' UNION ALL SELECT 'view'; 


SELECT F1.Details AS R1, F2.Details AS R2 
FROM @UDF_Function1 f1 inner join @UDF_Function2 f2 on f1.id=f2.id 
0

可以使用CTE柳,像這樣:

with 
UDF_Function1 (id, Details) as (
select 1, 'hidden' 
union all 
select 2, 'edit' 
union all 
select 3, 'edit' 
), 
UDF_Function2 (id, Details) as (
select 1, 'view' 
union all 
select 2, 'edit' 
union all 
select 3, 'view' 
) 

SELECT F1.Details AS R1, F2.Details AS R2 
FROM UDF_Function1 f1 inner join UDF_Function2 f2 on f1.id=f2.id 
相關問題