2014-03-05 97 views
0

的问题是:MSSQL - 隐与显式标识插入

是否有相同的INSERT同时指定隐&明确身份的一种方式吗?

INSERT INTO target (id, name) 
VALUES 
    (1, 'machin') 
, (2, 'chouette') 
, (3, 'trutruc') 
, (NULL, 'chouchouette') 
, (NULL, 'chose') 
; 

或者我必须做2个不同的查询吗?

请结算my fiddle


语境:我提出这个列表中的在线编辑器,他可以创建/更新/删除值用户。当他提交它时,我正在替换这些值。由于这些值与其他对象有关,我试图尽可能地保留它们的ID。

+1

如果您发现自己在关注“IDENTITY”列中指定的实际值,那么您可能会错误地使用它们。它们应该是不透明的斑点,恰好是独特行的句柄。 –

+0

上下文是我正在编辑整个列表,同时试图保留相关对象的ID。 –

回答

2

不,您必须使用单独的查询。要插入IDENTITY列,您必须转入IDENTITY_INSERTON - 此时,您要告诉服务器“相信我,我会提供适当的值”。

我试图建造所用IDENT_CURRENT和计算的身份值,请NULL的人查询,但有多少次不能保证IDENT_CURRENT叫什么值就会返回,因此很难产生效果等同于什么服务器在正常情况下会产生。

+0

谢谢你回答原来的问题(No :)。所以你建议我应该'更新'我有一个id和'INSERT'其他值的值,看起来确实是合乎逻辑的。 –

+1

@PierredeLESPINAY - 是的,尽管您可能想考虑['MERGE'](http://msdn.microsoft.com/zh-cn/library/bb510625.aspx)。 –

+0

何我不知道这个,看起来很有趣 –

0

当他提交它时,我正在替换这些值。

这就是所谓的严重编程错误。

问题是身份是身份,如果您删除/插入而不是更新,请确保您永远不能使用参照完整性。 RI是获得良好数据的核心基础 - 这种方法是非常有益的。

这里的主要问题不是“插入具体值”,而是“为什么要插入而不是更新”。