gpt4 book ai didi

sql-server - SQL Server 如何从列中删除标识

转载 作者:行者123 更新时间:2023-12-02 01:42:13 25 4
gpt4 key购买 nike

是否有一种简单的方法可以从 SQL Server 2005 中的表中删除标识?

当我使用 Management Studio 时,它会生成一个脚本,该脚本创建一个没有标识的镜像表、复制数据、删除表、然后重命名镜像表等。该脚本中有 5231 行,因为该表/列有很多FK关系。

运行简单的更改/删除会让我感觉更舒服。有什么想法吗?

编辑
我想我将使用企业管理器中的 5,231 行脚本。然而,我将把它分成更小的部分,我可以更好地运行和控制。该表的“行为”很奇怪,如果您尝试删除 1 行(即使是您刚刚插入的一行,该行不在任何其他 FK 表中),您会收到此错误:

delete MyTable where MyPrimaryKey=1234  

Msg 8621, Level 17, State 2, Line 1
The query processor ran out of stack space during query optimization. Please simplify the query.

毫无疑问,都是FK。当我们进行这些架构和相关应用程序更改时,我们将停止对应用程序的所有访问并以单用户模式运行。然而,我们需要它快速运行,我需要知道它需要多长时间。我想我只需要测试、测试、测试。

最佳答案

如果您使用的是 SQL Server 2005 或更高版本,则可以将其作为简单的元数据更改来执行(注意:正如我最初所述,不需要需要支持分区的版本)。

示例代码从 Paul White 在 this Microsoft Connect Item 上的解决方法中无耻地窃取。 .

USE tempdb;
GO
-- A table with an identity column
CREATE TABLE dbo.Source
(row_id INTEGER IDENTITY PRIMARY KEY NOT NULL, data SQL_VARIANT NULL);
GO
-- Some sample data
INSERT dbo.Source (data)
VALUES (CONVERT(SQL_VARIANT, 4)),
(CONVERT(SQL_VARIANT, 'X')),
(CONVERT(SQL_VARIANT, {d '2009-11-07'})),
(CONVERT(SQL_VARIANT, N'áéíóú'));
GO
-- Remove the identity property
BEGIN TRY;
-- All or nothing
BEGIN TRANSACTION;

-- A table with the same structure as the one with the identity column,
-- but without the identity property
CREATE TABLE dbo.Destination
(row_id INTEGER PRIMARY KEY NOT NULL, data SQL_VARIANT NULL);

-- Metadata switch
ALTER TABLE dbo.Source SWITCH TO dbo.Destination;

-- Drop the old object, which now contains no data
DROP TABLE dbo.Source;

-- Rename the new object to make it look like the old one
EXECUTE sp_rename N'dbo.Destination', N'Source', 'OBJECT';

-- Success
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
-- Bugger!
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
PRINT ERROR_MESSAGE();
END CATCH;
GO

-- Test the the identity property has indeed gone
INSERT dbo.Source (row_id, data)
VALUES (5, CONVERT(SQL_VARIANT, N'This works!'))

SELECT row_id,
data
FROM dbo.Source;
GO

-- Tidy up
DROP TABLE dbo.Source;

关于sql-server - SQL Server 如何从列中删除标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com