В моей базе данных SQL Server 2008 есть таблица аудита, которая содержит XML для данных, которые я проверяю.
Однако внутри этого XML мне требуется идентификатор записи аудита в таблице аудита.
Загвоздка в том, что идентификатор представляет собой столбец идентификаторов.
Так что это своего рода ловушка 22, я не могу вставить XML, пока не узнаю идентификатор, и не могу найти идентификатор, пока не вставлю XML.
Мне нужно, чтобы поле идентификатора было столбцом идентификаторов, и мне нужен идентификатор в XML.
Как я могу это сделать?
Редактировать
С точки зрения блокировки SQL, я знаю, что это не должно работать, однако работает нормально:
INSERT INTO Audit (
[Data]
,[CreatedUser]
,[CreatedDateTime]
,[LastModifiedUser]
,[LastModifiedDateTime]
) VALUES (
@Data
,@CreatedUser
,@CurrentDateTime
,@CreatedUser
,@CurrentDateTime
);
SELECT @NewAudit_ID = SCOPE_IDENTITY()
SELECT @Data = Data
FROM Audit WITH (NOLOCK)
WHERE Audit_ID = @NewAudit_ID
SET @Data.modify('
replace value of (/Search[1]/@Id[1]) with sql:variable("@NewAudit_ID")')
UPDATE Audit
SET Data = @Data
WHERE hAudit_ID = @NewAudit_ID
Почему это работает? Должен ли я использовать это?