我爱Aspx >> C#.Net >> 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除问题描述:
某个基础信息表,与系统中30多个表存在外键关系,当删除基础数据时,需要判断是否已经被用过,如果用过则更改标志位,如果没有用过则直接删除,如何能很好实现这个处理?最好能够自动适应表的变化
问题解决(SQL Server 2005)
-- SQL Server 2005的错误处理容易控制, 因此,SQL Server 2005中可以直接删除, 通过错误处理来确定是否需要更新.
-- 示例如下.
USE tempdb
GO
CREATE TABLE m(
id int PRIMARY KEY,
bz bit)
INSERT m SELECT 1, 0
UNION ALL SELECT 2, 0
CREATE TABLE c(
id int primary key,
a_id int references m(id)
ON DELETE NO ACTION)
INSERT c SELECT 1, 1
GO
-- 删除处理存储过程
CREATE PROC dbo.p_delete
@id int
AS
SET NOCOUNT ON
BEGIN TRY
BEGIN TRAN
DELETE FROM m WHERE id = @id
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
IF ERROR_NUMBER() = 547 -- 如果是外键约束错误
BEGIN
BEGIN TRY
BEGIN TRAN -- 更新标志
UPDATE m SET bz = 1
Ҷƪл˵?
无法在SQL 2005系统数据库中执行..[07-30]
SQL SERVER的数据类型 &&..[07-30]
Excel 2007中对重复数据的巧妙处..[07-30]
怎样将Excel中的数据导入到SQLSe..[07-30]
C#源码读取excel数据到程序中-SQ..[07-30]
Advatrack Pro保护数据安全 如何..[07-30]
C#分析数据库结构,使用XSL模板自..[07-30]
在一个jsp页面实现二级下拉框联动..[07-30]
利用javascript从数据库取数据来..[07-30]
sql server 添加数据库的方法[07-30]
一个无刷新效果定时自动更新页面..[07-30]
Windows 2003安全设置大全-2003系..[07-30]
Windows 2003安全设置大全-2003系..[07-30]
Windows 2003安全设置大全-站点的..[07-30]
Windows 2003安全设置大全-系统权..[07-30]
Windows 2003安全设置大全-硬盘分..[07-30]
Windows 2003安全设置大全-IIS、..[07-30]
SQL Server 2005 中能够使用 Try..[07-30]
列出SQL SERVER 所有表,字段名,..[07-30]
ASP.NET2.0的控件状态和视图状态..[07-30]