0

私は2つのテーブルtbl_itemを持っていますtbl_category.今私がしたいのは、選択したカテゴリのレコードがない場合にのみ、選択categoryしたものを削除することです.削除された場合、ストアドプロシージャはelseを返す必要があります.助けてください.tbl_catetgorytbl_itemcategory10

ALTER PROCEDURE [dbo].[Sp_DelItemcategory]
@code int
AS
BEGIN
    declare @sql varchar(max)
    DECLARE @data VARCHAR(50)

set @sql='SELECT   Cat_code FROM    dbo.Tbl_ItemMaster WHERE   Cat_code = '+@code;

declare dB_cursor cursor for 
    SELECT   Cat_code FROM    dbo.Tbl_ItemMaster WHERE   Cat_code = @code

    open dB_cursor
    fetch next from dB_cursor into @data
            WHILE @@FETCH_STATUS = 0  
            BEGIN         
                    set @sql='delete from Tbl_ItemCategory  where Cat_code='+@code;
            exec @sql
                    FETCH NEXT FROM db_cursor INTO @data  
            END  

        CLOSE db_cursor  
        DEALLOCATE db_cursor 

END
4

3 に答える 3

1
ALTER PROCEDURE [dbo].[Sp_DelItemcategory]
@code int
AS
if not exists(select * from tbl_item where Cat_Code = @code)
begin
    if exists(select * from tbl_category where Cat_Code = @code)
    begin
        delete from tbl_category where Cat_Code = @code
        return 1
    end
end
return 0
于 2013-10-02T05:08:04.470 に答える
1

削除が、パラメーター @Code として提供される特定の単一のカテゴリに基づいている場合、なぜカーソルと動的 SQL が必要なのですか。

あなたのコードから、両方のテーブルに Cat_Code 列が存在するようです。tbl_item と tbl_category。また、「Retun 1」は、テーブル tbl_category から 1 つ以上の行が削除された場合のみであると想定しています。

    if not exists(select top 1 1 from tbl_item where Cat_Code = @code)
    begin
        DELETE tbl_category where Cat_Code = @code
        IF @@ROWCOUNT >0
        RETURN 1
    END
    Else
    BEGIN
        RETURN 0
    END
于 2013-10-02T04:59:34.323 に答える
0

参照整合性、つまりテーブル間の外部キーをデータベースに追加すると、これは自動的に行われます。

さらに、これを実現するためにカーソルまたは動的 SQL を使用する必要はありません。

于 2013-10-02T04:56:14.277 に答える