我正在尝试编写一个 SQL 脚本,该脚本将通过一个带有新创建的 FK 的表,并使用外部表中的新行预先填充键。我不是 100% 知道如何做到这一点,或者它是否可能在一个单一的声明中,但这是我的尝试:
UPDATE [dbo].[Blogs]
set AuthorSecurableId = inserted.Id
FROM [dbo].[Blogs] updating
INNER JOIN
(INSERT INTO [dbo].[Securables] (Name)
OUTPUT Inserted.id, ROW_NUMBER() OVER (ORDER BY Inserted.Id) as rownum
SELECT 'Admin : ' + Name
FROM Blogs
WHERE AuthorSecurableId is null) inserted ON ROW_NUMBER() OVER (ORDER BY updating.Id) = inserted.rownum
WHERE updating.AuthorSecurableId is null
当我这样做时,我收到以下错误
消息 10727,级别 15,状态 1,第 5 行
嵌套的 INSERT、UPDATE、DELETE 或 MERGE 语句不允许在 JOIN 或 APPLY 运算符的任何一侧。
下面是我拥有的架构的简单视图
我想为每个没有安全对象的博客创建一个安全对象,并使用新创建的安全对象填充AuthorSecurableId
该ID
博客
我想我可以用游标来做到这一点,但我想知道是否有更好的单语句方法