SQL-如何在不自动递增ID列的情况下插入行?

时间:2009-06-26 15:06:51

标签: sql sql-server auto-increment

我有一个包含强制自动增量列的表,此列是一个非常有价值的ID,可以在整个应用程序中保留。很抱歉,我发现这是一个自动增量列的开发很差。

所以,这就是问题所在。我必须在此表中插入已经创建并从表中删除的列的ID。有点像复活这个ID并把它放回到表中。

那么我怎样才能以编程方式执行此操作而不关闭列增量。如果我错了,请纠正我,如果我以编程方式将其关闭,它将在0或1重新开始,我不希望这种情况发生......

4 个答案:

答案 0 :(得分:70)

如果您使用的是Microsoft SQL Server,则可以通过发出语句Set Identity_Insert [TableName] On来“关闭”autoIncrementing功能,如下所示:

  Set Identity_Insert [TableName] On
  -- --------------------------------------------
  Insert TableName (pkCol, [OtherColumns])
  Values(pkValue, [OtherValues])
  -- ---- Don't forget to turn it back off ------
  Set Identity_Insert [TableName] Off

答案 1 :(得分:8)

除了Charles的回答(现在100%正确:-)并且保留了表上IDENTITY的当前值),您可能还想检查表上IDENTITY的当前值 - 您可以使用此命令执行此操作:

DBCC CHECKIDENT('YourTableName')

如果您需要实际更改,可以在此处使用此命令:

DBCC CHECKIDENT ('YourTableName', RESEED, (new value for IDENTITY) )

答案 2 :(得分:3)

实际上,INDENTITY_INSERT的上述代码是正确的 - 将其打开会告诉服务器您想要自己插入值。它允许您将值插入IDENTITY列。然后,您需要在完成后将其关闭(允许服务器生成并插入值)。

答案 3 :(得分:0)


$files =[];
if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
           $files[filemtime($file)] = $file;
        }
    }
    closedir($handle);

    // sort in reverse order
    krsort($files);

    for($i =0; $i < 24; $i++) {
      $file = $files[$i]
      echo "<img src='".$file."' />";
    }
}