sql语句,将表中某个字段长度修改为满足16个汉子的存储

sql语句,将表中某个字段长度修改为满足16个汉子的存储
2024-11-24 06:29:34
推荐回答(1个)
回答1:

/* 为了防止任何可能出现的数据丢失问题,您应该先仔细检查此脚本,然后再在数据库设计器的上下文之外运行此脚本。*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_Table1
(
TopmsgID int NOT NULL IDENTITY (1, 1),
TopmsgInfo varchar(32) NOT NULL
)  ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_Table1 ON
GO
IF EXISTS(SELECT * FROM dbo.Table1)
 EXEC('INSERT INTO dbo.Tmp_Table1 (TopmsgID, TopmsgInfo)
SELECT TopmsgID, CONVERT(varchar(32), TopmsgInfo) FROM dbo.Table1 WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_Table1 OFF
GO
DROP TABLE dbo.Table1
GO
EXECUTE sp_rename N'dbo.Tmp_Table1', N'Table1', 'OBJECT' 
GO
ALTER TABLE dbo.Table1 ADD CONSTRAINT
PK_Table1 PRIMARY KEY CLUSTERED 
(
TopmsgID
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
COMMIT


其中【CONVERT(varchar(32), TopmsgInfo)】这句是关键,varchar(32)的长度才够存储16个汉字,这句话的意思是强制将原有列的长度转换为varchar(32)