我已经搜索过这个,但是看起来很容易得到那些不理解这个问题的人的答案.
采用以下语法:
SET IDENTITY_INSERT Table1 ON
你怎么做更像这样的事情:
GET IDENTITY_INSERT Table1
我不想对数据库中的数据或设置做任何事情以获取此信息.谢谢!
我正在使用该SqlBulkCopy对象将数百万个生成的行插入到数据库中.唯一的问题是我插入的表有一个标识列.我已经尝试设置SqlBulkCopyOptionsto SqlBulkCopyOptions.KeepIdentity并将标识列设置为0's,DbNull.Value和null.其中没有一个有效.我觉得我错过了一些非常简单的事情,如果有人能够启发我会很棒.谢谢!
编辑为了澄清,我没有在DataTable我导入中设置的标识值.我希望它们作为导入的一部分生成.
编辑2 
    这是我用来创建基础SqlBulkCopy对象的代码.
SqlBulkCopy sbc = GetBulkCopy(SqlBulkCopyOptions.KeepIdentity);
sbc.DestinationTableName = LOOKUP_TABLE;
private static SqlBulkCopy GetBulkCopy(SqlBulkCopyOptions options = 
    SqlBulkCopyOptions.Default) 
{
    Configuration cfg = WebConfigurationManager.OpenWebConfiguration("/RSWifi");
    string connString =
    cfg.ConnectionStrings.ConnectionStrings["WifiData"].ConnectionString;
    return new SqlBulkCopy(connString, options);
}
对于我正在处理的sql脚本,我需要以编程方式删除现有表中列的标识,标识种子和标识增量,然后将它们添加回脚本末尾的表中.有没有人有关于如何做到这一点的参考或示例?
我最近从PostgreSQL数据库迁移到SQL Server数据库.要切换数据我必须启用IDENTITY_INSERT.好吧,在任何表中执行插入操作时,我会发现由于重复的标识值(设置为主键)而导致各种奇怪的错误.
我有很多桌子.什么是最简单的方法来自动重新播种每个表的身份,以便它在之后max(RID)?
我有一个SQL Server数据库.该数据库有一个名为Item的表.Item有一个名为"ID"的属性.ID是我桌子上的主键.此主键是一个增量值为1的int.当我尝试插入记录时,收到一条错误消息:
当IDENTITY_INSERT设置为OFF时,无法在表'Item'中为identity列插入显式值."
我试图使用以下代码插入记录:
  public int AddItem(Item i)
  {
    try
    {
      int id = 0;
      using (DatabaseContext context = new DatabaseContext())
      {
        i.CreatedOn = DateTime.UtcNow;
        context.Items.InsertOnSubmit(i);
        context.SubmitChanges();
        id = i.ID;
      }
      return id;
    }
    catch (Exception e)
    {
      LogException(e);
    }
  }
当我在提交之前查看i.ID时,我注意到i.ID被设置为0.这意味着我正在尝试插入0作为标识.但是,我不确定应该是什么.有人可以帮我吗?
谢谢!
我试图在db中创建一个具有预定义主键值的记录.我知道如何用sql做这个,但我想知道EF是否可以为我做这个?否则,我将不得不为插入创建存储过程.
我需要做的是SET IDENTITY_INSERT dbo.myTable ON声明,在ac#app中使用上述语句的语法是什么?
我必须将此查询(此处简化)从T-SQL迁移到ORACLE
SET IDENTITY_INSERT table ON
INSERT INTO table (id, value) VALUES (1, 2)
SET IDENTITY_INSERT table OFF
id 是SQLServer中的标识字段.
我在ORACLE中有一个与序列相同的表,我找不到一个片段,显示如何禁用序列并将其设置为使用MAX(id)+ 1再次启动.
任何ORACLE专家都可以帮我解决这个问题吗?
谢谢,罗德里戈.
这是查询:
using (var db = new AppDbContext())
{
    var item = new IdentityItem {Id = 418, Name = "Abrahadabra" };
    db.IdentityItems.Add(item);
    db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT Test.Items ON;");
    db.SaveChanges();
}
执行时,Id新表上的插入记录仍为1.
新:当我使用交易或TGlatzer的答案时,我得到例外:
当IDENTITY_INSERT设置为ON或复制用户插入NOT FOR REPLICATION标识列时,必须为表'Items'中的标识列指定显式值.
我们运行Spring 3.1/Hibernate 4/Java 7/Tomcat 7/MSSQL 2008 R2 Web应用程序.我们必须处理遗留数据和归档数据.从存档中提取数据时,我们需要使用原始唯一标识符,以便其他(非存档)记录能够正确地重新水合.这些标识符存储在主键/自动增量字段中.
在此之前,现在,当我们在使用Spring 3.0/3.5休眠,下面的代码工作中插入一个提取的记录回其相应的表(我们已经有变量session,entity以及fullTableName在范围内):
session.doWork( new Work() 
{ 
    @Override
    public void execute(Connection connection) throws SQLException
    {
        PreparedStatement statement = null;
        try
        {
            statement = connection.prepareStatement(String.format("SET IDENTITY_INSERT %s ON", fullTableName));
            statement.execute();
            session.save(entity);
            statement = connection.prepareStatement(String.format("SET IDENTITY_INSERT %s OFF", fullTableName));
            statement.execute();
        }
        finally
        {  /* close the statement */ }
    }
});
就像我提到的,这在Hibernate 3.5中运行良好,但是现在我们已经升级到Hibernate 4,它已经停止工作了.Work和IsolatedWork之间有什么区别吗?
为了解决问题,并避免任何Work接口问题,我们尝试了以下方法:
session.createSQLQuery(String.format("SET IDENTITY_INSERT %s ON", fullTableName)).executeUpdate();
session.save(entity);
session.createSQLQuery(String.format("SET IDENTITY_INSERT %s OFF", fullTableName)).executeUpdate();
但是,这也不起作用.具体来说,抛出的异常是java.sql.SQLException: Cannot …
identity-insert ×10
sql-server ×5
c# ×4
.net ×1
hibernate ×1
identity ×1
implicit ×1
linq-to-sql ×1
migration ×1
oracle ×1
sequence ×1
sql ×1
sqlbulkcopy ×1
t-sql ×1
transactions ×1