Я пытаюсь написать сценарий 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
вновь созданного защищаемого объекта.
Я думаю, что мог бы сделать это с помощью курсора, но мне было интересно, есть ли лучший подход с одним оператором
INSERT
иUPDATE
в одном выражении. Вы должны сделать их в 2 операторах. - person ypercubeᵀᴹ   schedule 27.05.2013