Подзапрос вернул более 1 значения. Msg 512, уровень 16
Привет,
У меня есть триггер и две таблицы следующим образом,
Исходная Таблица TInfo:
CREATE TABLE [dbo].[TInfo] ( [F_Code] [Int_Positive] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL , [FirstName] [varchar] (256), [LastName] [varchar] (256), [Guid] [uniqueidentifier] NOT NULL ) ON [PRIMARY]
Перенос Триггера TInfoDeleteTrigger Который должен записывать все строки, которые будут удалены из исходной таблицы:
CREATE TRIGGER TInfoDeleteTrigger ON [dbo].[TArtikl] AFTER DELETE AS BEGIN DECLARE @tempGUID UNIQUEIDENTIFIER set @tempGUID = (SELECT GUID FROM DELETED) INSERT INTO TInfo_Performance_Queue (F_Cod, FirstName, LastName, Guid, username, operation, datetime, editionno)---two edition number variables SELECT F_Cod, FirstName, LastName, Guid, System_user, 'Delete row from TInfo', GetDate(), (SELECT dbo.GetMaxEditionNo(@tempGUID)) FROM DELETED END
Функция GetMaxEditionNo Который должен считывать максимальный номер издания записи:
The scenario of the edition number is to know how many time a record has beed updated through the application, I also have triggers for other operations but the problem is with the delete operation.
CREATE FUNCTION dbo.GetMaxEditionNo(@GUID UNIQUEIDENTIFIER) RETURNS INT AS BEGIN DECLARE @EditionNo int SET @EditionNo = (SELECT MAX(editionno) FROM TInfo_Performance_Queue WHERE TInfo_Performance_Queue.GUID = @GUID) RETURN @EditionNo END
Назначение Настольный TInfo_Performance_Queu:
CREATE TABLE [dbo].[TInfo_Performance_Queue] ( [F_Cod] [bigint] NULL , [FirstName] [varchar] (256), [LastName] [varchar] (256) [Guid] [uniqueidentifier] NULL , [username] [nvarchar] (256) COLLATE Arabic_CI_AS NULL , [operation] [nvarchar] (256) COLLATE Arabic_CI_AS NULL , [datetime] [datetime] NULL , [editionno] [int] NULL )
Если я удаляю строку вручную, все в порядке, и все идет так, как я ожидаю, но если я попытаюсь удалить строку с помощью GUID строки, триггер остановится из-за следующей ошибки:
Delete from TInfo where Guid = '{0B08A4F5-13A9-4417-992A-312B0F6CC310}'
Server: Msg 512, Level 16, State 1, Procedure TInfoDeleteTrigger, Line 7 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated.
Я не могу найти источник ошибки и пока не могу ее решить.
Что я уже пробовал:
Ну, я читаю возможные способы решить эту проблему, но пока не могу ее исправить.