我做了一个单元测试将数据记录添加/插入到具有列名Id的表中,该列是标识列。打开生产SQL服务器中的Identity_Insert是否存在任何缺陷
在单元测试中,我手动插入id。所以我可以在Insert语句之前将Identiy_Insert设置为ON。
在生产服务器上保持此功能是否有任何缺陷?
还是应该改变我的单元测试方法?插入名称字段的值,并检索
,并断言应该证明足够的数据记录得到了插入的积分
缘故。
我做了一个单元测试将数据记录添加/插入到具有列名Id的表中,该列是标识列。打开生产SQL服务器中的Identity_Insert是否存在任何缺陷
在单元测试中,我手动插入id。所以我可以在Insert语句之前将Identiy_Insert设置为ON。
在生产服务器上保持此功能是否有任何缺陷?
还是应该改变我的单元测试方法?插入名称字段的值,并检索
,并断言应该证明足够的数据记录得到了插入的积分
缘故。
从MSDN:
在任何时候,在会话中只有一个表的IDENTITY_INSERT属性设置为ON。如果一个表已经将此属性设置为ON,并且为另一个表发出了SET IDENTITY_INSERT ON语句,则SQL Server将返回一条错误消息,指出SET IDENTITY_INSERT已经打开并报告它设置为ON的表。
一般来说,我不建议在生产中使用IDENTITY_INSERT以避免并发问题。 至于单元测试,我建议创建一个模拟的数据访问层,而不是依赖真实的数据库。
它不是您可以继续使用的功能。它每个连接都有效。
试试看,在SSMS上打开一个连接并将其设置为ON为一个表。 然后打开另一个连接,你会看到如果你尝试在同一个表上插入IDENTITY,它将会失败。
身份插入(手动插入ID)将仅用于集成测试目的。稍后在生产服务器上将不存在手动ID插入。 - 虽然它可能是因为它打开了 - – Pascal 2012-02-25 20:18:30
但我的意思是你不能无限期地打开它。这是每次会话都会禁用的设置。这就是为什么我告诉你测试SSMS。打开2个连接到同一个数据库,将身份插入ON转到其中一个连接,并尝试使用其他连接插入身份。你会发现它会失败 – Diego 2012-02-25 20:23:10
以及该测试是什么?在我的集成测试中,不会打开第二个连接,然后访问同一个表!那么有什么意义。你想对我说什么? – Pascal 2012-02-25 20:34:06
“IDENTITY_INSERT ON”设置是一个**例外**设置,您应该在绝对需要**时仅打开**(并尽可能快地再次关闭)。 – 2012-02-25 21:27:33
很难跟随真正的问题在这里。 – 2015-01-07 18:53:24