将多个结果集合并到一个表中

时间:2017-02-13 07:26:05

标签: sql-server sql-server-2012

场景:我需要为权限表格准备Excel工作表的文档。应用程序中共有15个角色和20个模块,使用用户定义的函数传递roleid和moduleid,我获得了各个角色的权限详细信息,我可以复制并粘贴到Excel工作表中。

但是前进,我重复同样的任务300次。为了减少工作量,我计划在模块方面将所有角色的权限结合起来。所以我只能做20次任务。

我尝试了什么:我创建了一个UDF函数,将逗号分隔的结果从SP拆分为列。还创建了20个变量,以表格格式存储每个角色的权限详细信息。

示例数据和表格:考虑每个 if (FileUpload1.HasFile) { filename = Path.GetFileName(FileUpload1.FileName); //string BackupPath; ServerPath = @"D:\Iss\Integration\GC1\Backup\" + filename; FileUpload1.SaveAs(ServerPath); } 存储每个角色的权限详细信息,我希望以单一表格格式显示所有结果。

@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;

我的是SQL Server 2012。

3 个答案:

答案 0 :(得分: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。 如果没有连接条件,则两个表的行之间的笛卡尔积产生的结果超过了所需的行数。

答案 1 :(得分: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

答案 2 :(得分:0)

你可以使用cte yoo,就像这样:

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