我有一个包含强制自动增量列的表,此列是一个非常有价值的ID,可以在整个应用程序中保留。很抱歉,我发现这是一个自动增量列的开发很差。
所以,这就是问题所在。我必须在此表中插入已经创建并从表中删除的列的ID。有点像复活这个ID并把它放回到表中。
那么我怎样才能以编程方式执行此操作而不关闭列增量。如果我错了,请纠正我,如果我以编程方式将其关闭,它将在0或1重新开始,我不希望这种情况发生......
答案 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."' />";
}
}