【问题标题】:Can you make inserting by Id optional?您可以通过 Id 插入可选吗?
【发布时间】:2019-01-09 11:05:55
【问题描述】:

我希望能够以特定 ID 将某些内容插入到我的表中,因此我为该表打开了 IDENTITY_INSERT。但是,如果我只想让自动增量来处理 ID,则会出现此错误:

"必须为表中的标识列指定显式值 'TsiList' 当 IDENTITY_INSERT 设置为 ON 或当 复制用户正在插入 NOT FOR REPLICATION 身份 列。”

有没有办法进行查询

INSERT INTO table (ID, something_else) VALUES (15, 'foo'); 

INSERT INTO table (something_else) VALUES ('foo'); 

同时工作?

【问题讨论】:

    标签: sql sql-server identity-insert


    【解决方案1】:

    如果在运行每个查询之间根据需要打开和关闭identity_insert,您将无法做到这一点。

    每个版本只有在 identity_insert 设置为执行查询的会话中的相关值时才有效。

    例如:

    SET IDENTITY_INSERT TsiList ON;
    INSERT INTO TsiList (ID, something_else) VALUES (15, 'foo'); 
    SET IDENTITY_INSERT TsiList OFF;
    INSERT INTO TsiList (something_else) VALUES ('foo');
    

    【讨论】:

    • 这……出乎意料的麻烦。我以为我只是缺少一个功能。我想我会接受这个。谢谢你的信息:)
    • 繁琐?不是真的:这只是 DBMS 执行你给它的规则。如果您说要使用显式 ID 插入(这是您在设置 identity_insert 时告诉它的内容),那么这就是您必须做的。它不会猜测您已决定不打扰并想要使用自动增量,而是认为您忘记按承诺提供 ID,并拒绝继续,直到您这样做。在它的眼中,它可以保护您免于犯下无意的错误。如果您想要一个额外的选项来启用回退类型行为,则必须与 Microsoft 交谈 :-)
    猜你喜欢
    • 2010-10-26
    • 2011-10-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多