Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 在SQL Server 2000中查找孤立记录_Tsql_Sql Server 2000 - Fatal编程技术网

Tsql 在SQL Server 2000中查找孤立记录

Tsql 在SQL Server 2000中查找孤立记录,tsql,sql-server-2000,Tsql,Sql Server 2000,我的ERP数据库缺少任何外键,因此缺乏引用完整性 我正在编写一个脚本来检查数据库中的大多数主要表中的记录 例如,在本例中,我正在处理我们的销售表 SLCDPM - Customer Master Table SOMAST - Sales Order Master SOITEM - Sales Order Items SORELS - Sales Order Releases 基本上,对于这些表和一大堆其他表,我需要检查SOREL中是否有记录没有出现在上面的任何表中。然后拿一个SOITEM,在上

我的ERP数据库缺少任何外键,因此缺乏引用完整性

我正在编写一个脚本来检查数据库中的大多数主要表中的记录

例如,在本例中,我正在处理我们的销售表

SLCDPM - Customer Master Table
SOMAST - Sales Order Master
SOITEM - Sales Order Items
SORELS - Sales Order Releases
基本上,对于这些表和一大堆其他表,我需要检查SOREL中是否有记录没有出现在上面的任何表中。然后拿一个SOITEM,在上面检查一下。等等

我开始写剧本,但是台词的数量有点荒谬。这是我从这4张桌子开始的地方

select 'Sales Order Master',* from somast where fcustno not in (select fcustno from slcdpm where ftype <> 'P')
SELECT 'Sales Order Item',* FROM soitem WHERE fsono NOT IN (SELECT fsono FROM somast)
select 'Sales Order Release',* from sorels where (fsono+finumber) not in (select (fsono+finumber) from SOITEM)
我停下来的原因是,我刚刚意识到底部表的SORELS只检查它前面的表,而不是它前面的所有表


有谁知道我可以用一个脚本来让这更自动化,或者用一个更好的方法来实现它

人们像这样出售数据库垃圾;我在商业产品中看到的东西总是让我感到惊讶

我认为这是动态sql和游标的真实情况。这正是一种一次性管理功能,这就是为什么这些技术存在的原因。它们主要不是用于生产代码,而是用于管理任务

我会创建一个表,显示每个表以及我认为应该有外键的表。如果系统表至少有一个良好的命名约定,您甚至可以从系统表中填充它

然后,我将使用光标遍历该表并动态创建sql,以查看FK表是否有孤立记录

它仍然有很多代码,但至少你不必全部编写