开发者社区 问答 正文

如何更改SQL Server中数据库表上的TEXT列?

在SQL Server数据库中,我有一个表,其中包含一个TEXT字段,该字段设置为允许NULL。我需要更改它以不允许NULL。我可以通过企业管理器来做到这一点,但是当我尝试运行以下脚本时,更改表dbo。[EventLog] Alter列[Message]文本不为null,出现错误:

无法更改列“ ErrorMessage”,因为它是“文本”。

确实,在线阅读SQL Books确实表明,您不允许在TEXT字段上执行ALTER COLUMN。我确实确实需要能够通过脚本执行此操作,而不是在企业管理器中手动进行。那么在脚本中有哪些选择呢?

展开
收起
心有灵_夕 2019-12-28 23:54:10 1103 分享 版权
1 条回答
写回答
取消 提交回答
  • 您可以使用企业管理器来创建脚本。右键单击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
    
    2019-12-28 23:54:32
    赞同 展开评论