MSSQL主从表级联删除三种方法
在ERP系统设计或者其他运用系统经常遇到主从表的问题。
方法一:程序中处理
采用事务处理删除,代码省略。
方法二:触发器处理
示例
[sql]
-- =============================================
-- Author: <David Gong>
-- Create date: <2012-06-27>
-- Description: <级联删除报价单>
-- =============================================
ALTER TRIGGER [dbo].[RemoveZMQuotation]
ON [dbo].[ZMQuotation]
INSTEAD OF DELETE
AS www.2cto.com
BEGIN
SET NOCOUNT ON;
/*定义触发器使用的变量*/
declare @ID as int
declare @sCount Int
declare @SerialNo as nvarchar(20)
/* 把传送的需要删除的id键值赋值给@ID变量 */
/* 开始事务 */
BEGIN TRAN RemoveZMQuo
set @ID=(select id from deleted)
set @SerialNo=(select SerialNo from deleted)
/* 保存删除前保存点,防止出错 */
Save Tran My_Save1
/* 首先判断单身ZMQuotationLine中是否有所属内容 */
Set @sCount = (Select Count(*) From ZMQuotationLine Where ZMQuotationLine.Pid = @ID)
If @sCount > 0
begin
delete ZMQuotation where id=@ID
delete ZMQuotationLine where Pid=@ID
end
else
begin
delete ZMQuotation where id=@ID
end www.2cto.com
If @@Error = 0
begin
Commit Transaction
end
Else
Begin
Rollback Transaction My_Save1
Raiserror('删除出现错误,记录:%s及其所属内容没有被删除。',16,1,@SerialNo)
End
SET NOCOUNT OFF
END
三:主键-外键 级联