SQL Server Management Studio管理器有些时候慎用,写脚本修改才是王道

SQL Server Management Studio管理器真贱,今天使用脚本跟踪器偶然发现的。
我修改了一个字段的类型 RowFlag字段 int 到 bit

SMS管理器竟然是这样做的

比如表名:ABC
1.先根据ABC修改后的字段结构重新创建一张临时表,命名为tmp_ABC

它是这样做的

复制代码
CREATE TABLE dbo.Tmp_ABC(
    ID uniqueidentifier NOT NULL,
    ServerIP varchar(20) NULL,
    AccountName nvarchar(50) NULL,
    StaffID int NULL,
    StaffName nvarchar(50) NULL,
    GroupID int NULL,
    GroupName nvarchar(200) NULL,
    Remark nvarchar(MAX) NULL,
    OperatorName nvarchar(50) NULL,
    RecFlag tinyint NULL,
    OperatorTime datetime NULL,
    RowFlag bit NULL
)  ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
复制代码


2.把ABC的所有数据insert into from 到tmp_ABC表

它是这样做的(这个有点吓人)

IF EXISTS(SELECT * FROM dbo.ABC)
EXEC('INSERT INTO dbo.Tmp_ABC(ID, ServerIP, AccountName, StaffID, StaffName, GroupID, GroupName, Remark, OperatorName, RecFlag, OperatorTime, RowFlag)
SELECT ID, ServerIP, AccountName, StaffID, StaffName, GroupID, GroupName, Remark, OperatorName, RecFlag, OperatorTime, CONVERT(bit, RowFlag) 
FROM dbo.ABC WITH (HOLDLOCK TABLOCKX)')


3.然后把ABC删了,在把tmp_ABC名称改成ABC

它是这样做的

 

DROP TABLE dbo.ABCEXECUTE 

sp_rename N'dbo.Tmp_ABC', N'ABC', 'OBJECT'

 

4.把ABC所有属性,外键,说明,关系等弄到tmp_ABC临时表上

它是这样做的

ALTER TABLE dbo.ABC ADD CONSTRAINT
    PK_AccountRec PRIMARY KEY CLUSTERED 
    (
    ID
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

等等操作。


如果这要这张表数据很多,那改起来不就悲剧了。。

所有大数据的表一定要使用脚本来修改,不要图方便右键去编辑表,切记。

posted @   JasNature  阅读(1060)  评论(4编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2011-04-26 调用API获取系统内存与CPU信息
点击右上角即可分享
微信分享提示