删除数据时检查数据是否被其他数据表使用,其他位置使用了,就不给删除
2017-07-11 14:31
447 查看
USE [DB_qqq]
GO
/****** Object: StoredProcedure [dbo].[CheckDeleteFieldValueWithExclude] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*@ExcludeXml='<TABLES><TABLE>PARTLABLE</TABLE></TABLES>'*/
ALTER PROC [dbo].[CheckDeleteFieldValueWithExclude] @TableName VARCHAR(50), @FieldName VARCHAR(50),@FieldValue VARCHAR(500),@ExcludeXml VARCHAR(500)
AS
BEGIN
DECLARE @SQL NVARCHAR(2000),@Used INT,@XML XML
DECLARE @Name NVARCHAR(100)
SET @Used=0
SET @XML=@ExcludeXml
DECLARE Cur Cursor FOR
SELECT ob.name FROM SYS.columns cl ,sys.objects ob WHERE cl.name=@FieldName AND cl.object_id=ob.object_id
AND ob.type='U' AND ob.name<>@TableName
Open Cur
Fetch NEXT From Cur Into @Name
While @@fetch_status=0
BEGIN
--检查表是否排除
DECLARE @COUNTNUM INT
SET @COUNTNUM=0
SELECT @COUNTNUM=COUNT(*) FROM
(SELECT N.value( '(text())[1]','NVARCHAR(MAX)' ) TABLENAME
FROM @XML.nodes('/TABLES/TABLE') V(N) ) as temp
where TABLENAME=@Name
IF @COUNTNUM>0
BEGIN
Fetch Next From Cur Into @Name
CONTINUE
END
SET @SQL=' Select @Used = Count('+@FieldName +') from '+@Name +' Where '+@FieldName +'='+ ''''+@FieldValue+''''
exec sp_executesql @sql,N'@Used int out',@Used out
if @Used>0
break
Fetch Next From Cur Into @Name
END
IF @Used=0
SELECT '' AS USE_TABLE
ELSE
SELECT @Name AS USE_TABLE
CLOSE Cur
DEALLOCATE Cur
END
GO
/****** Object: StoredProcedure [dbo].[CheckDeleteFieldValueWithExclude] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*@ExcludeXml='<TABLES><TABLE>PARTLABLE</TABLE></TABLES>'*/
ALTER PROC [dbo].[CheckDeleteFieldValueWithExclude] @TableName VARCHAR(50), @FieldName VARCHAR(50),@FieldValue VARCHAR(500),@ExcludeXml VARCHAR(500)
AS
BEGIN
DECLARE @SQL NVARCHAR(2000),@Used INT,@XML XML
DECLARE @Name NVARCHAR(100)
SET @Used=0
SET @XML=@ExcludeXml
DECLARE Cur Cursor FOR
SELECT ob.name FROM SYS.columns cl ,sys.objects ob WHERE cl.name=@FieldName AND cl.object_id=ob.object_id
AND ob.type='U' AND ob.name<>@TableName
Open Cur
Fetch NEXT From Cur Into @Name
While @@fetch_status=0
BEGIN
--检查表是否排除
DECLARE @COUNTNUM INT
SET @COUNTNUM=0
SELECT @COUNTNUM=COUNT(*) FROM
(SELECT N.value( '(text())[1]','NVARCHAR(MAX)' ) TABLENAME
FROM @XML.nodes('/TABLES/TABLE') V(N) ) as temp
where TABLENAME=@Name
IF @COUNTNUM>0
BEGIN
Fetch Next From Cur Into @Name
CONTINUE
END
SET @SQL=' Select @Used = Count('+@FieldName +') from '+@Name +' Where '+@FieldName +'='+ ''''+@FieldValue+''''
exec sp_executesql @sql,N'@Used int out',@Used out
if @Used>0
break
Fetch Next From Cur Into @Name
END
IF @Used=0
SELECT '' AS USE_TABLE
ELSE
SELECT @Name AS USE_TABLE
CLOSE Cur
DEALLOCATE Cur
END
相关文章推荐
- 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)
- 数据库删除数据时判断数据是否被其他数据表使用1
- 在MVC中如何在使用 MicrosoftMvcValidation验证的前提下使用 jQuery.Ajax 提交数据的时候检查验证是否通过
- 设置窗体的起始位置,并检查配置文件是否存在,存在使用配置文件,不存在创建配置文件,在每次打开窗体时保持窗体上一次关闭的位置。
- 判断表中的数据是否被其他表中使用过!!
- MFC ComboBox 使用方法-初始化,添加,得到选择的数据,得到数据的位置,删除
- 使用struts2在页面局部位置上传文件,不影响其他文本框数据
- 网络编程(17)—— 使用recv检查输入缓存是否有数据
- 位运算(篇1)不使用任何其他的数据结构检查一个字符串中是否有重复字符
- 判断表中的数据是否被其他表中使用过!!
- 删除数据时,获取ID为空。注意检查请求时候的id能否获取到,或者是请求连接是否有误。
- 一个使用GridView显示数据,并且可以进行添加、修改、删除操作的例子
- 关于使用sql删除数据库重复的数据的方法整理:
- 使用ACCESS中隐藏的MSysObjects数据表来确定是否存在某个数据表!
- 使用ACCESS中隐藏的MSysObjects数据表来确定是否存在某个数据表!
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除 (转)
- [导入]实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- [导入]使用事务与锁,实现一个用户取过的数据不被其他用户取到
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- 使用事务与锁,实现一个用户取过的数据不被其他用户取到