MSSql - 隐含&显式身份INSERT

时间:2014-03-05 08:08:29

标签: sql-server sql-server-2012 uniqueidentifier sql-insert

问题是:

有没有办法同时指明隐含和&明确的同一性INSERT

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

或者我是否必须进行2次不同的查询?

请结帐my fiddle


上下文:我正在向用户创建一个内联编辑器给用户,他可以在其中创建/更新/删除值。当他提交它时,我正在取代这些价值观。由于这些值与其他对象有关,我试图尽可能地保留它们的ID。

2 个答案:

答案 0 :(得分:2)

不,你必须使用单独的查询。要甚至插入IDENTITY列,您必须转为IDENTITY_INSERT ON - 此时,您告诉服务器“相信我,我会提供适当的值”。< / p>

我尝试构建一个使用IDENT_CURRENT并计算NULL个身份值的查询,但无法保证IDENT_CURRENT被调用的次数以及它的值是多少返回,因此很难产生与服务器在正常情况下产生的结果相同的结果。

答案 1 :(得分:0)

  

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

这被称为严重的编程错误。

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

这里的主要问题不是“使用特定值插入”,而是“为什么要插入而不是更新”。