0

データベースからの既存のデータを保持する変更ページにテキストボックスがあります。このデータは、SQL Server テーブルでは個別の行ですが、テキスト ボックスではコンマで区切られた単一の行として表示されます。

例:テーブル

keyid   name 
--------------
  101     ss
  105     hh
  109     tt

私のWebフォームでは、のようなテキストボックスに表示されます ss,hh,tt。と ( に関連する製品)Keysproductsを保持するブリッジ テーブル ( ) があります。keyidproductidkeyid

ここで私の問題は次のとおりです。

テキストボックスに既存のエントリとともにエントリを追加すると、重複する値が挿入されないというエラーメッセージが表示され、既存の ID が表示されます。以下は、そのための私のストアドプロシージャです。

keyname行を挿入しない場合は存在するかどうかを確認し、そうでない場合は更新します。私のアプローチが間違っている場合は、私を導いてください。

create PROCEDURE [dbo].[modify] 
      (
        @keyName nvarchar(256),
        @productdbid uniqueidentifier

      )
AS
Begin
  declare 
    @productid uniqueidentifier,
    @keyid uniqueidentifier,
    @id uniqueidentifier;

    declare @keydata table (keyid uniqueidentifier);

    set @productid =(select ProductID from Products where ProductID = @productdbid );

Begin


    if not exists(select keyname from keys where KeyName = @keyName)
    begin
       insert into Keys(KeyId, KeyName)
       output inserted.KeyId into @keydata(keyid)
       values (newid(), @keyName);

       select @keyid = keyid from @keydata;

       insert into KeysProducts(KeyId,productId)
        values (@keyid, @productid);
     end
     else
     begin
        set @id = (select keyid  from keys where KeyName = @keyName)

        update keywords 
        set KeyId = @id, KeyName = @keyName 
        where KeyName= @keyName;
    end

    if not exists(select * from Keysproducts where ProductID = @productid and KeyId= @id) 
     begin
        insert into Keysproducts(KeyId, ProductID)
        values (@id, @productid);       
     end
     else
     begin
         update Keysproducts 
         set KeyId = @id, productID = @productid;
     end
  end
end

終わり

4

1 に答える 1

0

このストアド プロシージャをどのように使用しているかについて、さらに詳しい情報が必要だと思います。たとえば、テキストボックスに最初に ss,hh,tt が含まれていて、それを ss,hh,tt,zz に変更した場合、値ごとに手順を 1 回実行すると想定していますか? では、ss に対して実行し、次に hh、tt、および zz に対して個別に実行しますか?

productdbid パラメータ値はどこから取得しますか?

テーブルにはどのような制約があり、違反しているのはどれですか (PK、または一意の制約)?

正確にはどのようなエラーが発生しますか?

また、最後の更新に WHERE 句がないため、テーブル内のすべてのレコードを更新しようとしていることも指摘したいと思います。この Keysproduct テーブルでエラーが発生した場合は、これが原因です。

 begin          
    update Keysproducts   
    set KeyId = @id, productID = @productid;
 end 
于 2012-07-11T19:05:56.440 に答える