判断表中的数据是否被其他表中使用过!!
2004-08-24 11:14
393 查看
CREATE PROCEDURE dbo.SystemFuntion_HasBeUsed
@PTableName Varchar(100), --要检查数据是否被使用的主键表名称
@PKValue INT, --主键字段的值
@IsUsed INT OUTPUT
AS
DECLARE @TableName VARCHAR(100) --外键表的名称
DECLARE @FKName VARCHAR(100) --外键字段名称
DECLARE @FKey INT
DECLARE @SQL VARCHAR(8000)
SET @sql = 'SELECT 0 as colCount into #tempTableCol UNION '
DECLARE cursorFKTable CURSOR FOR
SELECT b.[name] AS TableName , a.fkey
FROM sysforeignkeys a INNER JOIN sysobjects b on a.fkeyid=b.[id] INNER JOIN sysobjects c on a.rkeyid=c.[id]
WHERE c.[name]=@PTableName
OPEN cursorFKTable
FETCH NEXT FROM cursorFKTable INTO @TableName,@FKey
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @FKName = a.[name] FROM syscolumns a INNER join sysobjects b ON a.[id]=b.[id] WHERE b.[name]=@TableName and @FKey=a.colid
SET @sql = @sql + 'SELECT CASE WHEN COUNT(*)=0 THEN 0 ELSE 1 END FROM ' + @TableName +' WHERE ' + @FKName + '=' + CAST(@PKValue AS VARCHAR(100))
SET @sql = @sql + ' UNION '
FETCH NEXT FROM cursorFKTable INTO @TableName,@FKey
END
CLOSE cursorFKTable
DEALLOCATE cursorFKTable
SELECT @sql = left(@sql,len(@sql)-6)
exec(@sql)
SELECT @IsUsed = @@ROWCOUNT-1
GO
使用方法:
/***********获取当前主键值是否被其他表使用过(@HasPKValueBeUsed as HasPKValueBeUsed)*************/
DECLARE @HasPKValueBeUsed INT
EXECUTE SystemFuntion_HasBeUsed 'TLSubjectPlan',@SubjectPlanID,@IsUsed=@HasPKValueBeUsed OUTPUT
/*******************************************************************************/
@PTableName Varchar(100), --要检查数据是否被使用的主键表名称
@PKValue INT, --主键字段的值
@IsUsed INT OUTPUT
AS
DECLARE @TableName VARCHAR(100) --外键表的名称
DECLARE @FKName VARCHAR(100) --外键字段名称
DECLARE @FKey INT
DECLARE @SQL VARCHAR(8000)
SET @sql = 'SELECT 0 as colCount into #tempTableCol UNION '
DECLARE cursorFKTable CURSOR FOR
SELECT b.[name] AS TableName , a.fkey
FROM sysforeignkeys a INNER JOIN sysobjects b on a.fkeyid=b.[id] INNER JOIN sysobjects c on a.rkeyid=c.[id]
WHERE c.[name]=@PTableName
OPEN cursorFKTable
FETCH NEXT FROM cursorFKTable INTO @TableName,@FKey
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @FKName = a.[name] FROM syscolumns a INNER join sysobjects b ON a.[id]=b.[id] WHERE b.[name]=@TableName and @FKey=a.colid
SET @sql = @sql + 'SELECT CASE WHEN COUNT(*)=0 THEN 0 ELSE 1 END FROM ' + @TableName +' WHERE ' + @FKName + '=' + CAST(@PKValue AS VARCHAR(100))
SET @sql = @sql + ' UNION '
FETCH NEXT FROM cursorFKTable INTO @TableName,@FKey
END
CLOSE cursorFKTable
DEALLOCATE cursorFKTable
SELECT @sql = left(@sql,len(@sql)-6)
exec(@sql)
SELECT @IsUsed = @@ROWCOUNT-1
GO
使用方法:
/***********获取当前主键值是否被其他表使用过(@HasPKValueBeUsed as HasPKValueBeUsed)*************/
DECLARE @HasPKValueBeUsed INT
EXECUTE SystemFuntion_HasBeUsed 'TLSubjectPlan',@SubjectPlanID,@IsUsed=@HasPKValueBeUsed OUTPUT
/*******************************************************************************/
相关文章推荐
- 数据库删除数据时判断数据是否被其他数据表使用1
- 判断表中的数据是否被其他表中使用过!!
- 不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者
- 使用grep判断是否需要通过sed往文件中增加数据。
- 使用js,判断数组中是否有重复数据
- Hibernate 使用HQL的 in 时要注意判断in的值(list)是否包含数据
- 判断ie浏览器版本是否过低,然后提示更新或者使用其他浏览器
- C# 判断 检测 access 建库 建表 文件是否存在等 数据操作 使用 ADOX
- Android判断网络状态是否断开+Android完全关闭应用程序+ 本文讲述了Android中不同Activity之间的数据传递 — Bundle对象的实现(-)+Android中Bundle的使用示例
- 可判断数据中有多个数字只出现一次,其他所有数字都是成对出现的。然后输出这些数字。(使用位运算)
- 转:已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。
- 已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。
- 当获取相似数据时,使用不同方法调用不同sp,但是使用同一个方法去用IIDataReader或者SqlDataReader读取数据时需要判断column name是否存在。
- wex5中使用password控件,密码可以隐藏,判断输入框是否为空时,无法通过password的.val()方法获取数据
- js使用数组判断提交数据是否存在相同数据
- js使用数组判断提交数据是否存在相同数据
- C# 判断 检测 access 建库 建表 文件是否存在等 数据操作 使用 ADOX
- 用最简单的函数实现功能:判断一个int数据是否是2的x次幂(不能使用循环)。
- js使用数组判断提交数据是否存在相同数据
- 删除数据时检查数据是否被其他数据表使用,其他位置使用了,就不给删除