我有一个由我们公司的其他团队编写的应用程序,它将数据插入一个表中。 假设他们使用字段
将数据写入表Log1现在我需要在另一个只有部分数据的表(Log2)中添加另一条记录:
我认为有两种方法可以做到:
您认为这种情况下的最佳方式是什么?为什么?
非常感谢你的帮助。
P.S。我正在使用MS SQL 2005
答案 0 :(得分:2)
选择选项1.
这意味着即使没有使用“正确的”存储过程接口,表也会正确同步,并且插入多行会更容易,更有效(如何使用SQL Server中的存储过程执行此操作) 2005? - 多次调用?首先将所有数据转换为XML格式?)
答案 1 :(得分:1)
真正保证数据完整性的唯一方法是使用触发器。总是有人会执行一个绕过你的SP的操作(批量操作,sql插入语句等)。
答案 2 :(得分:1)
如果您使用触发器,请注意,因为Log1和Log2似乎都使用标识列,您无法使用SELECT @@IDENTITY
返回Log1的PK - 您需要使用{{1} }。
另一方面,如果您使用SPROC,您可以做的是从(几乎)所有人撤消对您的表的INSERT权限,而是在您的SPROC上授予EXEC。这样就可以很好地保护对桌子的访问。
答案 3 :(得分:0)
使用选项2。
应尽可能避免使用触发器。
一个不那么明显的原因:你曾经使用过SQL Server复制工具吗?触发器复制起来不会非常简单。 (即它不像点击几下那么容易,就像表格一样)。但是我要离开主题...底线,触发器是邪恶 ......当你可以时避免。
修改强>
更多原因:与DBMS中的其他对象一样,触发器看并不容易。在应用程序方面,它们是不可见的,如果没有详细记录,它们往往会被遗忘。如果模式有变化......哦,使用存储过程维护内容会更容易。