在SQL Server数据库中,我有一个表,其中包含一个TEXT字段,该字段设置为允许NULL。我需要更改它以不允许NULL。我可以通过企业管理器来做到这一点,但是当我尝试运行以下脚本时,更改表dbo。[EventLog] Alter列[Message]文本不为null,出现错误:
无法更改列“ ErrorMessage”,因为它是“文本”。
确实,在线阅读SQL Books确实表明,您不允许在TEXT字段上执行ALTER COLUMN。我确实确实需要能够通过脚本执行此操作,而不是在企业管理器中手动进行。那么在脚本中有哪些选择呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您可以使用企业管理器来创建脚本。右键单击EM中的表,然后选择“设计”。取消选中文本字段的允许空列。不用单击常规的保存图标(软盘),而是单击看起来像带有小软盘的金色滚动图标,或者从菜单中执行“表设计器”>“生成更改脚本”。将脚本保存到文件中,以便您可以重复使用它。这是一个示例脚本:
/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/
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_TestTable
(
tableKey int NOT NULL,
Description varchar(50) NOT NULL,
TextData text NOT NULL
) ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.TestTable)
EXEC('INSERT INTO dbo.Tmp_TestTable (tableKey, Description, TextData)
SELECT tableKey, Description, TextData FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.TestTable
GO
EXECUTE sp_rename N'dbo.Tmp_TestTable', N'TestTable', 'OBJECT'
GO
ALTER TABLE dbo.TestTable ADD CONSTRAINT
PK_TestTable PRIMARY KEY CLUSTERED
(
tableKey
) ON [PRIMARY]
GO
COMMIT