重新设定大型sql表的种子
使用版本:重新设定大型sql表的种子,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,使用版本: Microsoft SQL Server 2008 R2 (SP3-OD) (KB3144114) - 10.50.6542.0 (Intel X86) Feb 22 2016 18:12:09 Copyright (c) Microsoft Corporation Standard Edition on Windows NT 5.2 <X86> (Build : ) 我甚至尝试删除该列,以便稍后重新创建,但我遇到了同样的问题 谢谢 更新: 表结构: CREATE
Microsoft SQL Server 2008 R2 (SP3-OD) (KB3144114) - 10.50.6542.0 (Intel X86)
Feb 22 2016 18:12:09
Copyright (c) Microsoft Corporation
Standard Edition on Windows NT 5.2 <X86> (Build : )
我甚至尝试删除该列,以便稍后重新创建,但我遇到了同样的问题
谢谢
更新:
表结构:
CREATE TABLE [dbo].[tblEmailsSent](
[id] [int] IDENTITY(1,1) NOT NULL, -- this is what it should be. currently its just an `[int] NOT NULL`
[Sent] [datetime] NULL,
[SentByUser] [nvarchar](50) NULL,
[ToEmail] [nvarchar](150) NULL,
[StudentID] [int] NULL,
[SubjectLine] [nvarchar](200) NULL,
[MessageContent] [nvarchar](max) NULL,
[ReadStatus] [bit] NULL,
[Folder] [nvarchar](50) NULL,
CONSTRAINT [PK_tblMessages] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
我认为你的问题是重复的。上面这个问题有一个非常适合你的情况的答案。我将在下面复制它的基本部分
但在此之前,让我们澄清一下为什么会出现超时错误 您正试图将
IDENTITY
属性添加到现有列中。您正在为此使用SSMS GUI。一个简单的ALTER COLUMN
语句无法实现这一点,即使可以,SSMS也会生成一个脚本,创建一个新表,将数据复制到新表中,删除旧表,并将新表重命名为旧名称。当您通过SSMS GUI执行此操作时,它将以30秒的预定义超时运行其脚本
当然,您可以在SSMS中更改此设置并增加超时,但有一种更好的方法
begintransaction
,最后只有一个COMMIT
。您不希望以一个半途而废的操作结束,比如说,一个删除了所有索引和外键的表
如果是一次性手术,对你来说就足够了。您的表只有2.4GB,因此可能需要几分钟,但不应该是几个小时
如果您自己在SSMS中运行T-SQL脚本,则默认情况下没有超时。如果时间太长,你可以自己停下来
BEGIN TRANSACTION;
-- create a new table with required schema
CREATE TABLE [dbo].[NEW_tblEmailsSent](
[id] [int] IDENTITY(1,1) NOT NULL,
[Sent] [datetime] NULL,
[SentByUser] [nvarchar](50) NULL,
[ToEmail] [nvarchar](150) NULL,
[StudentID] [int] NULL,
[SubjectLine] [nvarchar](200) NULL,
[MessageContent] [nvarchar](max) NULL,
[ReadStatus] [bit] NULL,
[Folder] [nvarchar](50) NULL,
CONSTRAINT [PK_tblEmailsSent] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
-- switch the tables
ALTER TABLE [dbo].[tblEmailsSent] SWITCH TO [dbo].[NEW_tblEmailsSent];
-- drop the original (now empty) table
DROP TABLE [dbo].[tblEmailsSent];
-- rename new table to old table's name
EXEC sp_rename 'NEW_tblEmailsSent','tblEmailsSent';
COMMIT;
新表具有
IDENTITY
属性后,通常应将当前标识值设置为表中实际值的最大值。如果不这样做,插入表中的新行将从1开始
一种方法是在切换表后运行:
DBCC CHECKIDENT('dbo.tblEmailsSent')
或者,可以在表定义中指定新种子:
CREATE TABLE [dbo].[NEW_tblEmailsSent](
[id] [int] IDENTITY(<max value of id + 1>, 1) NOT NULL,
创建表[dbo]。[NEW\u tblEmailsSent](
[id][int]标识(,1)不为空,
你是在C#或VB中使用SqlCommand还是直接使用工作表单SSMS?不要使用SSMS UI来更改表架构。使用t-SQL脚本可以更有效地完成此操作,如果需要帮助,请发布现有表的DDL。谢谢各位。是的,我使用的是SSMS。我已在问题中粘贴了创建
代码。此表很重s现在大约在2.4GB…谢谢。谢谢你提供详细的答案。我将版本添加到OP中。这是我在尝试运行解决方案#2:ALTER TABLE SWITCH语句时遇到的错误。表“dbo.NEW_tblEmailsSent”具有聚集索引“PK_tblEmailsSent”,而表“dbo.tblEmailsSent”没有聚集索引例如
错误消息很清楚-一个表有聚集索引,另一个没有。请确保新表的定义与现有表完全相同,除了标识部分。使用SSMS生成创建表
脚本。hmmm…获取注意:更改对象名称的任何部分可能会破坏脚本和存储过程。
@kneidels,是的,这是来自sp_rename
的警告。SSMS生成的脚本也使用sp_rename
,但是当您通过GUI运行它时,您看不到此警告。我如何通过GUI运行它?您的意思是保存脚本然后运行它吗?我认为运行脚本的全部意义在于T-SQL,是不是更快?
CREATE TABLE [dbo].[NEW_tblEmailsSent](
[id] [int] IDENTITY(<max value of id + 1>, 1) NOT NULL,