Я получаю ввод ключевых слов в текстовом поле, таком как test, check, .. и т. Д. Я вставляю это ключевое слово в виде отдельных строк в свою базу данных, проверяя, существует ли оно, если существует обновление или еще вставить .Так KeywordId и элемент, который представляет в этом идентификатор должен быть вставлен в мост table.On вставки существующего ключевого слова он выдает ошибки:Ошибка SQL: Подзапрос вернул более 1 значения
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Cannot insert the value NULL into column 'KeywordId', table 'dbo.Keywordsitems'; column does not allow nulls. INSERT fails.
Я использую ниже хранимую процедуру
ALTER PROCEDURE [dbo].[InsertKeywords]
(
@keywordName nvarchar(256),
@itemid uniqueidentifier
)
AS
begin
declare
@itemid uniqueidentifier,
@keywordid uniqueidentifier,
@id uniqueidentifier;
declare @keyworddata table (keywordid uniqueidentifier);
set @id = (select KeywordId from keywords where [email protected])
set @itemid =(select itemId from Items where ItemID = @itemid);
if not exists(select keyname from keywords where KeyName = @keywordName)
begin
insert into Keywords(KeywordId,KeyName)
output inserted.KeywordId into @keyworddata(keywordid)
values (newid(),@keywordName);
select @keywordid = keywordid from @keyworddata;
insert into Keywordsitems(KeywordId,ItemId)
values (@keywordid,@itemid);
end
else
begin
update keywords set [email protected] where KeywordName= @keywordName;
insert into KeywordsResources(KeywordId,itemId) values (@id,@itemid);
end
end
Если у вас есть несколько строк с тем же '' KeyName' или ItemID', какой из них вы хотите? Похоже, что у вас где-то отсутствует ограничение. –
Мне нужно проверить одно и то же ключевое слово, если существует обновление, если не вставить его. Мне нужна проверка в моей таблице ключевых слов, у которой есть только ключевое слово, ключевое слово name column.Onse обновление или вставка делается в таблице ключевых слов позже мне нужно вставить на мост таблица, где я должен вставить как keywordid, так и itemid. – newuser1555
Ваш код сильно зависит от вашего кода. Ваш '@ itemid' переключается с' @ itemid' на '@ databaseid'? Зачем? Если для определенного элемента существует более одного 'resourcedatabaseId', что вы хотите сделать? В настоящее время (с исправлением, приведенным ниже) он собирается выбрать произвольный идентификатор базы данных, а не цикл через все из них. '@ itemid' не волшебным образом становится массивом ... –