2012-02-25 43 views
-2

我做了一个单元测试将数据记录添加/插入到具有列名Id的表中,该列是标识列。打开生产SQL服务器中的Identity_Insert是否存在任何缺陷

在单元测试中,我手动插入id。所以我可以在Insert语句之前将Identiy_Insert设置为ON。

在生产服务器上保持此功能是否有任何缺陷?

还是应该改变我的单元测试方法?插入名称字段的值,并检索

,并断言应该证明足够的数据记录得到了插入的积分

缘故。

+1

“IDENTITY_INSERT ON”设置是一个**例外**设置,您应该在绝对需要**时仅打开**(并尽可能快地再次关闭)。 – 2012-02-25 21:27:33

+0

很难跟随真正的问题在这里。 – 2015-01-07 18:53:24

回答

0

从MSDN:

在任何时候,在会话中只有一个表的IDENTITY_INSERT属性设置为ON。如果一个表已经将此属性设置为ON,并且为另一个表发出了SET IDENTITY_INSERT ON语句,则SQL Server将返回一条错误消息,指出SET IDENTITY_INSERT已经打开并报告它设置为ON的表。

一般来说,我不建议在生产中使用IDENTITY_INSERT以避免并发问题。 至于单元测试,我建议创建一个模拟的数据访问层,而不是依赖真实的数据库。

+0

单元测试不能替代集成测试。 – Pascal 2012-02-25 20:16:07

+0

手动插入仅来自我的集成测试。在生产中,用户插入的数据记录不会插入ID) – Pascal 2012-02-25 20:21:26

+0

我发现模拟的数据库层变得很麻烦,而且确实没有比管理他们自己的数据设置/使用情况的一套好的集成测试增加更多的价值。在大多数情况下嘲笑浪费时间,增加解决方案的复杂性以及额外的编码时间,而不真正了解数据如何在现场工作。 – tsells 2012-02-26 01:09:35

1

它不是您可以继续使用的功能。它每个连接都有效。

试试看,在SSMS上打开一个连接并将其设置为ON为一个表。 然后打开另一个连接,你会看到如果你尝试在同一个表上插入IDENTITY,它将会失败。

+1

身份插入(手动插入ID)将仅用于集成测试目的。稍后在生产服务器上将不存在手动ID插入。 - 虽然它可能是因为它打开了 - – Pascal 2012-02-25 20:18:30

+1

但我的意思是你不能无限期地打开它。这是每次会话都会禁用的设置。这就是为什么我告诉你测试SSMS。打开2个连接到同一个数据库,将身份插入ON转到其中一个连接,并尝试使用其他连接插入身份。你会发现它会失败 – Diego 2012-02-25 20:23:10

+0

以及该测试是什么?在我的集成测试中,不会打开第二个连接,然后访问同一个表!那么有什么意义。你想对我说什么? – Pascal 2012-02-25 20:34:06

相关问题