我有两个表格tbl_item
和tbl_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
答案 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来实现此