在SQL Server中将INT转换为BIGINT

4

SQL 2005,6亿行。

我有一个名为Location的表,目前在标识PK列LocationID中使用INT数据类型。我想尝试将此数据类型转换为BIGINT。

我认为下面的脚本应该可以帮助允许插入到PK列中,但我不确定如何继续进行。

SET IDENTITY_INSERT LOCATION ON /*allows insert into the identity column*/`

SET IDENTITY_INSERT LOCATION OFF /*Returns the identity column to initial state*/`

以下是位置表的创建脚本:
CREATE TABLE [dbo].[Location](
    [LocationID] [int] IDENTITY(1,1) NOT NULL,
    [JourneyID] [int] NULL,
    [DeviceID] [int] NOT NULL,
    [PacketTypeID] [int] NULL,
    [PacketStatusID] [int] NULL,
CONSTRAINT [Location_PK] PRIMARY KEY CLUSTERED 
(
    [LocationID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[Location]  WITH CHECK ADD  CONSTRAINT [Device_Location_FK1] FOREIGN KEY([DeviceID])
REFERENCES [dbo].[Device] ([DeviceID])
GO
ALTER TABLE [dbo].[Location] CHECK CONSTRAINT [Device_Location_FK1]
GO
ALTER TABLE [dbo].[Location]  WITH CHECK ADD  CONSTRAINT [PacketStatus_Location_FK1] FOREIGN KEY([PacketStatusID])
REFERENCES [dbo].[PacketStatus] ([PacketStatusID])
GO
ALTER TABLE [dbo].[Location] CHECK CONSTRAINT [PacketStatus_Location_FK1]
GO
ALTER TABLE [dbo].[Location]  WITH CHECK ADD  CONSTRAINT [PacketType_Location_FK1] FOREIGN KEY([PacketTypeID])
REFERENCES [dbo].[PacketType] ([PacketTypeID])
GO
ALTER TABLE [dbo].[Location] CHECK CONSTRAINT [PacketType_Location_FK1]

我认为一种选择是将数据复制到新表中,然后删除旧表并重命名新表,但是我们有一些需要被删除才能正常工作的约束条件。

1个回答

5

你的新建表的想法是正确的。

在开发服务器上,如果你使用表设计器更改数据类型,你可以看到SSMS将生成的脚本。这是一个好的开始。这将在之后添加触发器和约束。

Red gate SQL Compare等工具还可以帮助你检查是否一切都创建成功。


谢谢回复...不确定你的意思。这篇文章:http://lisazhou.wordpress.com/2008/07/16/sql-server-generate-change-script-from-table-design-view/ 解释了。然而,当我尝试选择脚本选项并保存文本文件时,我看到:不允许保存更改。您所做的更改需要删除并重新创建以下表格。您已经对无法重新创建的表格进行了更改或启用了防止保存需要重新创建表格的更改的选项。生成的文件不包含任何会产生修改的脚本。 - scott_lotus
抱歉,我明白了,在更改数据类型之前,请先删除约束条件,现在可以看到脚本了。这很有帮助,谢谢。 - scott_lotus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接