db中存在主键人力human,由于日积月累的数据,再加上前期设置主外键的混乱,有许多的子表里的键都属于human表中humanID,loginID,humanMonitorID的外键,并且有些表根本没有建立外键但值却存放着外键值。
现在要彻底删除某些主表的值,但在删除前需要找到这些值在其它表引用的数据有多行,所以就有了下面的解决方法:
IF OBJECT_ID ('p_JCXX_HumanQueryHumanID') IS NOT NULL
DROP PROCEDURE p_JCXX_HumanQueryHumanID
GO
-- 传入的主健ID,返回的是引用行数
CREATE PROCEDURE p_JCXX_HumanQueryHumanID @humanID nvarchar(128),
@totalCount INT OUTPUT
AS SET NOCOUNT OFF
DECLARE @num INT;
DECLARE @sql NVARCHAR(512);
DECLARE @ptab NVARCHAR(50);
DECLARE @pcol NVARCHAR(50);
DECLARE @ftab NVARCHAR(50);
DECLARE @fcol NVARCHAR(50);
DECLARE @hmid NVARCHAR(50); -- 人力监控ID
DECLARE @lgid NVARCHAR(50); -- 人力登陆ID
CREATE TABLE #T(
ptab NVARCHAR(128),
pcol NVARCHAR(128),
ftab NVARCHAR(128),
fcol NVARCHAR(128)
);
SELECT @hmid=humanMonitorID, @lgid=loginID FROM Human WHERE humanID = @humanID;
INSERT INTO #T
SELECT rtable.name ptab, cn.name pcol, ftable.name ftab, fkcn.name fcol
FROM sysforeignkeys INNER
JOIN sysobjects ftable ON sysforeignkeys.fkeyid = ftable.id INNER
JOIN sysobjects rtable ON sysforeignkeys.rkeyid = rtable.id INNER
JOIN syscolumns fkcn ON sysforeignkeys.fkeyid = fkcn.id AND sysforeignkeys.fkey = fkcn.colid INNER
JOIN syscolumns cn ON sysforeignkeys.rkeyid = cn.id AND sysforeignkeys.rkey = cn.colid
WHERE rtable.name IN ('Human')
-- 主表名,主列名,外表名,外列名(数据库未建立外键,但数值是属于外健,手动指定)
INSERT INTO #T (ptab,pcol,ftab,fcol)
SELECT 'Human','humanID','MonitorModifyHistory','humanID' UNION
SELECT 'Human','humanID','TypicalPart','designer';
BEGIN
DECLARE datas CURSOR FOR SELECT * FROM #T
OPEN datas;
FETCH next FROM datas INTO @ptab,@pcol,@ftab,@fcol
WHILE @@FETCH_STATUS=0
BEGIN
IF @pcol ='humanID'
SET @sql = 'select @i=count(' + @fcol + ') from [' + @ftab + '] WHERE ' + @fcol + ' = '''+ @humanID + '''';
IF @pcol ='loginID'
SET @sql = 'select @i=count(' + @fcol + ') from [' + @ftab + '] WHERE ' + @fcol + ' = '''+ @lgid + '''';
IF @pcol ='humanMonitorID'
SET @sql = 'select @i=count(' + @fcol + ') from [' + @ftab + '] WHERE ' + @fcol + ' = '''+ @hmid + '''';
IF @sql IS NOT NULL
BEGIN
EXEC sp_executesql @sql, N'@i int output',@num OUTPUT
IF @num >0
SET @totalCount = @totalCount + @num;
END;
FETCH next FROM datas INTO @ptab,@pcol,@ftab,@fcol
END;
CLOSE datas;
DEALLOCATE datas;;
END
分享到:
相关推荐
### Excel计算合并单元格所占行数 #### 知识点概述 在Excel中处理大量数据时,常常需要对合并单元格进行各种操作,比如计算它们所占据的行数。这种需求常见于需要统计每组数据的具体行数,或者是在进行数据分析时...
报表名)引用),必须<BR>txtCurrentPage 报表主体节上的[txtCurrentPage]文本框控件 ,必须<BR>txtRecordNum 报表定义的私人变量 数据类型:Integer 用于记录数的递增,必须(注:在报表模块顶部声明 : Private ...
该模型分为三个部分:被检仪表和标准器信息录入模块、精密压力表检定记录表模块、精密表检定证书内页生成模块。 1. 被检仪表和标准器信息录入模块: 该模块录入被检仪表信息,包括使用单位、器号、测量范围、准确度...
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql="select ...
在"21.1-11多维引用示例的数据来源.xls"中,"二维平面"工作表可能包含了一些示例数据,这些数据被组织成表格形式,每行代表一个特定的记录,每列代表一个属性。通过多维引用,我们可以根据需要从这些数据中提取特定...
- `COUNT(*)` 或 `COUNT(字段名)` 对数据行数的统计或对某一栏有值的数据行数统计 - `MAX(字段名)` 取得一个表格栏最大的值 - `MIN(字段名)` 取得一个表格栏最小的值 - `SUM(字段名)` 把数据栏的值相加 引用...
在学生和成绩的例子中,交叉连接会返回所有学生的每一条成绩记录,即使成绩表中没有对应的数据,结果集的大小将是两个表行数的乘积。 - `SELECT s.*, g.* FROM student s CROSS JOIN grade g;` 总结来说,SQL中的...
OFFSET函数在Excel中是一个非常实用的工具,尤其在处理动态数据和创建动态图表时。...在实际工作中,熟练掌握OFFSET函数的运用可以大大提高数据处理的效率,同时也能让Excel工作表的动态性和智能性显著提升。
- 不允许在 `REPLACE INTO` 语句中引用当前行的值或在新行中使用计算的值,如 `SET col_name = col_name + 1` 会被视为 `SET col_name = DEFAULT(col_name) + 1`。 2. **权限与返回值**: - 使用 `REPLACE INTO` ...
- **工作簿结构优化**:合理组织工作簿结构,比如设置主工作表汇总其他子工作表,便于管理和查看。 6. **宏的安全性与使用**: - **启用宏**:默认情况下,Excel可能禁用宏以保护系统安全。用户需要在信任中心...
9. rows:根据表统计信息及索引选用情况,大致估算出找到所需要记录、读取的行数,该值越小越好。 10. Extra:额外的重要信息,常见且重要的有:using filesort(文件内排序,MySQL 无法用给定的索引进行排序,在...
3. 聚合函数含义:AVG求平均值,SUM求和,MAX求最大值,MIN求最小值,COUNT(*)返回所有行数,COUNT返回满足特定条件的记录数。 4. INNER JOIN:内连接,返回两个表中匹配的记录。基本语法是:SELECT...FROM 表1 ...
03032设定工作表被保护时是否启用数据透视表控件和操作 03033设定工作表被保护时是否可以选定单元格 03034新建工作表并重命名 03035复制工作表 03036移动工作表 03037删除工作表 03038保护工作表 03039撤销保护工作...
- **主键 (primary key)**:表中的一个或多个字段,其值唯一标识表中的每一条记录。 - **标识列 (identity)**:自增列,每次插入新记录时自动递增。 - **外键 (foreign key)**:用于建立表间关联的字段,引用另一...
在SQL Server 2005中,一个数据库可以包含大量表,每张表的列数有限,行数也有限制,但足以满足大多数实际需求。 接下来,我们深入学习数据类型,这是定义数据库中字段性质的关键。常见的数据类型包括: 1. 数字...
- **引用完整性**:通过外键约束确保表间引用的合法性。 - **自定义完整性**:根据业务需求设置的额外约束,确保数据的完整性和一致性。 13. **视图**:视图是从一个或多个表中选择数据的虚拟表,可以更新,但...
整列最大值可写为`=MAX($G:$G)`或`R1C7:R[行数]C7`。 学习和掌握R1C1样式引用不仅有助于深入理解Excel的内部工作原理,还可以提高编写复杂公式和VBA代码的效率,特别是在处理大量数据和自动化任务时。
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql="select sum...
- **Foreign Key**: 外键,用于建立两个表之间的关联,引用另一个表的主键。 - **Check**: 检查,用于定义列的约束条件,确保输入的数据符合特定规则。 - **Constraint**: 约束,用于限制表中数据的类型和范围,...