問題
向已有表增加字段
執行下面sql,sql執行增加兩個字段分別:
- articleTitle 正標題 [nvarchar](200)
- articleSubTitle 副標題 [nvarchar](200)
USE [tg_thirdparty] GO /****** Object: Table [dbo].[WX_Activity] Script Date: 10/31/2018 10:54:46 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO IF NOT EXISTS ( SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.ID = T2.ID WHERE T1.NAME = 'WX_Activity' AND T2.NAME = 'articleTitle' ) BEGIN ALTER TABLE [dbo].[WX_Activity] ADD [articleTitle] [nvarchar](200) NOT NULL --ALTER TABLE [dbo].[WX_Activity] ADD CONSTRAINT [DF_WX_Activity_articleTitle] DEFAULT ('') FOR [articleTitle] --ALTER TABLE [dbo].[WX_Activity] ALTER COLUMN [articleTitle] [nvarchar](200) NOT NULL EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'正標題', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'WX_Activity', @level2type = N'COLUMN', @level2name = N'articleTitle' END GO IF NOT EXISTS ( SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.ID = T2.ID WHERE T1.NAME = 'WX_Activity' AND T2.NAME = 'articleSubTitle' ) BEGIN ALTER TABLE [dbo].[WX_Activity] ADD [articleSubTitle] [nvarchar](200) NOT NULL --ALTER TABLE [dbo].[WX_Activity] ADD CONSTRAINT [DF_WX_Activity_articleSubTitle] DEFAULT ('') FOR [articleSubTitle] --ALTER TABLE [dbo].[WX_Activity] ALTER COLUMN [articleSubTitle] [nvarchar](200) NOT NULL EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'副標題', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'WX_Activity', @level2type = N'COLUMN', @level2name = N'articleSubTitle' END GO
提示錯誤
消息 4901,級別 16,狀態 1,第 10 行 ALTER TABLE 只允許添加滿足下述條件的列: 列可以包含 Null 值;或者列具有指定的 DEFAULT 定義;或者要添加的列是標識列或時間戳列;或者,如果前幾個條件均未滿足,則表必須為空以允許添加此列。不能將列"articleTitle"添加到非空表"WX_Activity"中,因為它不滿足上述條件。 消息 4901,級別 16,狀態 1,第 9 行 ALTER TABLE 只允許添加滿足下述條件的列: 列可以包含 Null 值;或者列具有指定的 DEFAULT 定義;或者要添加的列是標識列或時間戳列;或者,如果前幾個條件均未滿足,則表必須為空以允許添加此列。不能將列"articleSubTitle"添加到非空表"WX_Activity"中,因為它不滿足上述條件。
解決方法:
表中已經有數據了,不設置默認值,有要求字段不能為NULL,矛盾了!!
所以先指定默認值,插入字段時,加上默認值 DEFAULT ''
USE [tg_thirdparty] GO /****** Object: Table [dbo].[WX_Activity] Script Date: 10/31/2018 10:54:46 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO IF NOT EXISTS ( SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.ID = T2.ID WHERE T1.NAME = 'WX_Activity' AND T2.NAME = 'articleTitle' ) BEGIN ALTER TABLE [dbo].[WX_Activity] ADD [articleTitle] [nvarchar](200) NOT NULL DEFAULT '' --ALTER TABLE [dbo].[WX_Activity] ADD CONSTRAINT [DF_WX_Activity_articleTitle] DEFAULT ('') FOR [articleTitle] --ALTER TABLE [dbo].[WX_Activity] ALTER COLUMN [articleTitle] [nvarchar](200) NOT NULL EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'正標題', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'WX_Activity', @level2type = N'COLUMN', @level2name = N'articleTitle' END GO IF NOT EXISTS ( SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.ID = T2.ID WHERE T1.NAME = 'WX_Activity' AND T2.NAME = 'articleSubTitle' ) BEGIN ALTER TABLE [dbo].[WX_Activity] ADD [articleSubTitle] [nvarchar](200) NOT NULL DEFAULT '' --ALTER TABLE [dbo].[WX_Activity] ADD CONSTRAINT [DF_WX_Activity_articleSubTitle] DEFAULT ('') FOR [articleSubTitle] --ALTER TABLE [dbo].[WX_Activity] ALTER COLUMN [articleSubTitle] [nvarchar](200) NOT NULL EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'副標題', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'WX_Activity', @level2type = N'COLUMN', @level2name = N'articleSubTitle' END GO