Некоторые моменты:
- Более подробная информация о структуре таблицы и оригинальном операторе вставки поможет решить проблему быстрее.
- Ваш триггер не учитывает массовую вставку.Я полагаю, вы знаете об этом.
- В строке, где вы объявляете
@countryid
, вы не отфильтровали свой оператор select
, чтобы найти правильный countryid
из таблицы стран.Также вы ставите топ 1 или похожее предложение, чтобы избежать ошибок, таких как Subquery returned more than 1 value
.
Наиболее вероятная причина ошибки, которую вы получаете, заключается в коде, из которого вы пытаетесь вставить файл main.jsontable, который вы передаете NULL
страна.
Вот код обновления вашего триггера, который выдаст лучшее сообщение об ошибке, если произойдет сбой из-за упомянутого выше случая.
alter trigger main.afterParsing
on main.jsontable
after insert
as
begin
set nocount on;
insert into main.country(countryName)
select country
from inserted
where country is not null
declare @countryName nvarchar(50) = (Select country from inserted);
declare @countryId uniqueidentifier = (Select top 1 countryId from main.country where countryName = @countryName);
if(@countryId is null)
begin
RAISERROR ('country not matching', 16, 1)
end
else
begin
insert into main.person ([name], surname, email, birthYear, balance, registered, countryId)
select
[name], surname, email, age, balance, registered, @countryId
from
inserted
where
name is not null
and surname is not null
and email is not null
and age is not null
and balance is not null
and registered is not null
end
end
GO
@ matthew-pavia - Проверьте и дайте мне знать, если это поможет.