检查并删除存储过程

时间:2013-10-02 04:45:05

标签: c# sql-server stored-procedures

我有两个表格tbl_itemtbl_category,现在我只想在category没有记录的情况下从tbl_catetgory删除所选的tbl_item对于选定的category.if category被删除存储过程应返回1其他0。请帮助。

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

3 个答案:

答案 0 :(得分:1)

如果删除是基于给定的单个类别,它作为参数@Code提供,那么为什么需要游标和一些动态的SQL。

从您的代码

看来,两个表中都存在Cat_Code列; tbl_item和tbl_category。 我也假设“Retun 1”仅在从tabe tbl_category删除一行或多行时才会显示。

    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

答案 1 :(得分: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

答案 2 :(得分:0)

如果您将表之间的引用完整性(即外键)添加到数据库,则会自动执行此操作。

此外,无需使用游标或动态SQL来实现此