SQL迁移脚本:插入到,但从中选择多个
我试图在一个表中插入多行,我基本上想要一个嵌套循环。我有以下建议代码:SQL迁移脚本:插入到,但从中选择多个,sql,sql-server,select,insert,Sql,Sql Server,Select,Insert,我试图在一个表中插入多行,我基本上想要一个嵌套循环。我有以下建议代码: with Permissions (Id) as ( select Id from Surge.Permission where Name in ( 'Web.Orders:Enable', 'App.Orders:Enable', 'Web.Orders:View', 'App.Orders:View', 'Web.Orders:Mo
with Permissions (Id) as
(
select Id from Surge.Permission where Name in (
'Web.Orders:Enable',
'App.Orders:Enable',
'Web.Orders:View',
'App.Orders:View',
'Web.Orders:Modify',
'App.Orders:Modify',
'Web.Orders:View.All',
'App.Orders:View.All'
)
)
insert Surge.[RolePermission] (DataPartitionId, PermissionId, RoleId)
select DP.Id, Permissions.Id, 2 from Surge.DataPartition as DP
不过,这似乎不对(LINQPad似乎不喜欢它;它似乎找不到权限.Id
)。如何使用常规SQL实现这一点?基本上,我希望输出为:
1, 1, 2
1, 2, 2,
1, 3, 2
...
2, 1, 2
2, 2, 2
2, 3, 2
依此类推,就像一个嵌套循环。根据示例数据冒险猜测您想要
Permission.ID
和DataPartition.ID
的每个组合:
with Permissions as
(select Id
from Surge.Permission
where Name in ('Web.Orders:Enable',
'App.Orders:Enable',
'Web.Orders:View',
'App.Orders:View',
'Web.Orders:Modify',
'App.Orders:Modify',
'Web.Orders:View.All',
'App.Orders:View.All'
)
)
INSERT INTO Surge.[RolePermission] (DataPartitionId, PermissionId, RoleId)
SELECT DP.Id, p.Id, 2
FROM Surge.DataPartition as DP
CROSS JOIN Permissions p
如果不是这样,您可以将
交叉连接
更改为另一个连接
类型并添加条件。cte的目的是什么?您没有在insert/select语句中引用它。@GoatCO我已经编辑了代码。我在那里犯了一些错误,可能是我错误地复制了同事给我的原始代码片段的一部分。您的编辑去掉了讨厌的代码(id,2),但仍然没有引用select中的cte。具有权限
即cte。带构造的SQL是一个公共表表达式(cte)。这很有效!我以前尝试过JOIN语句,但遇到了一些问题-我想我做错了什么。不过,交叉连接工作得很好。非常感谢。