0

テスト、チェックなどのテキストボックスにキーワード入力を取得しています。それらのキーワードが存在するかどうかを確認するときにデータベースに個々の行として挿入し、存在する場合は更新するか、挿入します。これを表すこのキーワード ID と項目id をブリッジ テーブルに挿入する必要があります。既存のキーワードを挿入すると、エラーがスローされます。

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 KeyName=@keywordName)
  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 KeyName=@keywordName where KeywordName= @keywordName;
    insert into KeywordsResources(KeywordId,itemId) values (@id,@itemid);       
  end
end
4

1 に答える 1

0

TOP 1 を使用してこれを解決できます。

例えば、

...
set @id = (select top 1 KeywordId  from keywords where KeyName=@keywordName)
set @itemid =(select top 1 resourcedatabaseId from Items where ItemID = @itemid); 
...
于 2012-06-27T18:31:35.620 に答える