【发布时间】:2014-04-09 19:39:35
【问题描述】:
我正在尝试将多行插入到一个表中,我基本上想要一个嵌套循环。我有以下建议的代码:
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 似乎不喜欢它;它似乎找不到 Permissions.Id)。我将如何使用常规 SQL 执行此操作?基本上,我希望输出是:
1, 1, 2
1, 2, 2,
1, 3, 2
...
2, 1, 2
2, 2, 2
2, 3, 2
等等,就像一个嵌套循环。
【问题讨论】:
-
cte 的目的是什么?您没有在插入/选择语句中引用它。
-
@GoatCO 我已经编辑了代码。我有一些错误,我可能错误地复制了我同事给我的原始 sn-p 的一部分。
-
您的编辑摆脱了讨厌的 (id,2),但仍然没有在选择中引用 cte。
-
with Permissions即所谓的 CTE -
SQL WITH 构造是公用表表达式 (CTE)。
标签: sql sql-server select insert