如何以与在数据库服务器上完成相同的方式检查约束

时间:2012-03-23 15:36:21

标签: mysql sql-server oracle ms-access

我正致力于动态生成使用C ++,C#甚至Java解析数据库约束检查的数据。我目前正致力于应用程序的设计,并希望了解如何在代码中完成此操作。

我想查询数据库中有关表的信息,当我得到该信息时,对于每个CheckConstraint,我想要做的是,在代码中,解析该约束,并以某种方式生成数据符合约束。我希望能够为USER指定的任何数据库执行此操作。鉴于我试图坚持ANSI SQL标准,我认为这个方法适用于任何符合的数据库。

这适用于任何数据库,因为数据生成不仅限于SQL Server。

1 个答案:

答案 0 :(得分:0)

正如所指出的,JET可以使用一些约束命令。

例如:

CREATE TABLE Customers 
   (CustId IDENTITY (100, 10), 
   CFrstNm VARCHAR(10), 
   CLstNm VARCHAR(15),
   CustomerLimit DOUBLE,

   CHECK (CustomerLimit <= (SELECT SUM (CreditLimit) FROM CreditLimit)))

所以在上面,客户限制不能超过信用额度。

作为一天的结束,我不确定海报的位置,因为每个数据库供应商不仅具有不同的功能,而且关系完整性功能不同,因此设置的关系完整性语法也不同这样的关系和选项如删除限制

如上所述,除了Access中的RI功能(以及一些通过sql DDL命令)之外,我们还检查了约束语法(再次通过sql DDL命令),我们现在也有了存储过程代码。

并且AGAIN这样的语法在功能方面是不同的,并且ALSO语法明智。

因此,对于Access 2010和新数据引擎ACE,我们可以选择表触发器和存储过程。因此,您可以编写过程代码来检查条件,如果在更改前触发器中引发错误,则不会发生更新。因此,在更改事件之前存储过程也是实现防止记录更新的条件测试的另一种方法。然而,这样的存储过程代码再次是供应商特定的,就像它对于pl / sql,T-SQL或。

一样。

因此,真正的挑战是存储过程代码的语法和语言对于每个系统都是不同的。

所以在Access中你可以使用一些DDL命令来“检查”约束,你也可以有一些RI功能(删除限制,级联删除,FK级联更新)。最后但并非最不重要的是,您现在还可以为Access 2010(以及新的ACE数据引擎)编写一些表触发器代码。

在一天结束时,在许多情况下,真正的问题不是功能上的差异,而是对这些功能不常见的标准采用的更糟糕的部分。