2013-10-02 69 views
0

我有兩個表tbl_itemtbl_category,現在我想要做的是選擇category.if category被刪除的存儲過程應該返回1其他0刪除所選categorytbl_catetgory只有tbl_item沒有記錄。請幫忙。檢查和刪除存儲過程

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 = '[email protected]; 

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='[email protected]; 
      exec @sql 
        FETCH NEXT FROM db_cursor INTO @data 
      END 

     CLOSE db_cursor 
     DEALLOCATE db_cursor 

END 
+0

任何企圖至今? – Paritosh

+0

你做了什麼嗎?提出你的解決方案。 –

+0

上面的sp會刪除找到記錄時,但我想刪除,如果沒有找到記錄 – Anand

回答

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 
+0

感謝它的工作.. – Anand

0

如果在表中添加參照完整性(即外鍵)到數據庫,這將自動發生。

此外,也沒有必要使用遊標或動態SQL來實現這一

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