Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将多个结果集合并到一个表中_Sql Server_Sql Server 2012 - Fatal编程技术网

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

Sql server 将多个结果集合并到一个表中,sql-server,sql-server-2012,Sql Server,Sql Server 2012,场景:我需要为权限矩阵准备一份excel表文档。应用程序中总共有15个角色和20个模块,使用用户定义的函数传递roleid和moduleid,我可以获得单个角色的权限详细信息,并可以复制和粘贴到excel工作表中 但接下来,我会重复同样的任务300次。为了减少工作量,我计划在模块中合并所有角色的权限。所以我只能做20次 我尝试的内容:我创建了一个UDF函数,用于将SP中以逗号分隔的结果拆分为列。还创建了20个变量,以表格式存储每个角色的权限详细信息 DECLARE @UDF_Function1

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

但接下来,我会重复同样的任务300次。为了减少工作量,我计划在模块中合并所有角色的权限。所以我只能做20次

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

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;

<强>示例数据和表:考虑每个<代码> @ Udfl函数< /C>存储每个角色的权限细节,并希望以单个表格式显示所有结果。

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。

试试这个

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
。 在没有联接条件的情况下,两个表的行之间发生笛卡尔积,结果行数超过要求。

试试这个

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

在没有联接条件的情况下,两个表的行之间发生笛卡尔积,结果行数超过要求。

添加标识列并进行简单联接

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

添加标识列并执行简单的联接

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

您可以使用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

您可以使用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

返回我的预期结果,谢谢。返回我的预期结果,谢谢。