场景:我需要为权限表格准备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。
答案 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