问:
如何将具有默认值的列添加到 SQL Server 2000 / SQL Server 2005 中的现有表?
答1:
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
句法:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES
例子:
ALTER TABLE SomeTable
ADD SomeCol Bit NULL --Or NOT NULL.
CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.
笔记:
可选的约束名称:如果省略 CONSTRAINT D_SomeTable_SomeCol,则 SQL Server 将自动生成 具有有趣名称的默认约束,例如:DF__SomeTa__SomeC__4FB7FEF6
可选的 With-Values 语句: 仅当您的列为 Nullable 时才需要 WITH VALUES 并且您想要用于现有记录的默认值。如果您的列是 NOT NULL,那么它将自动使用默认值 对于所有现有记录,无论您是否指定 WITH VALUES。
插入如何与默认约束一起使用:如果您将记录插入 SomeTable 并不指定 SomeCol’ s 值,则默认为 0。 如果您插入记录 并且 将 SomeCol 的值指定为 NULL(以及您的列允许空值), 那么默认约束将不被使用,并且 NULL 将作为值插入。
笔记基于以下每个人的出色反馈。特别感谢:@Yatrix、@WalterStabosz、@YahooSerious 和 @StackMan 的评论。
请记住,如果该列可以为空,则 null 将是用于现有行的值。
@Thecrocodilehunter Nullable 列意味着您可以为列值插入 Null。如果它不是可为空的列,则必须插入该数据类型的一些值。因此,对于现有记录,将在其中插入 Null,在新记录中,除非另有说明,否则将插入您的默认值。说得通?
我比 dbugger 更喜欢这个答案,因为它明确命名了默认约束。仍然使用 dbugger 的语法创建默认约束,除了它的名称是自动生成的。在编写 DROP-CREATE 脚本时知道确切的名称很方便。
使用 WITH VALUES 更新现有的可为空行。请参阅 MSDN:“如果添加的列允许空值并且指定了 WITH VALUES,则默认值存储在新列中,并添加到现有行中。”
当它回填默认值时,它会触发更新触发器和/或获取表锁吗?如果是这样,它们可以避免吗?
答2:
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO
包含 DEFAULT 会使用默认值填充现有行中的列,因此不会违反 NOT NULL 约束。
只是为了澄清 - 如果命令中省略了“NOT NULL”,则现有行的值将不会被更新并且将保持为 NULL。如果命令中包含“NOT NULL”,则将更新现有行的值以匹配默认值。
答3:
打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!
添加可为空的列时,WITH VALUES 将确保将特定的 DEFAULT 值应用于现有行:
ALTER TABLE table
ADD column BIT -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
答4:
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
ALTER TABLE
ADD NOT NULL
GO
ALTER TABLE
ADD CONSTRAINT DEFAULT FOR
GO
答5:
huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
答6:
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
最基本的版本,只有两行
ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
答7:
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
当您添加的列具有 NOT NULL 约束但没有 DEFAULT 约束(值)时请注意。在这种情况下,如果表中有任何行,ALTER TABLE 语句将失败。解决方案是从新列中删除 NOT NULL 约束,或为其提供 DEFAULT 约束。
答8:
huntsbot.com – 高效赚钱,自由工作
利用:
-- Add a column with a default DateTime
-- to capture when each record is added.
ALTER TABLE myTableName
ADD RecordAddedDate SMALLDATETIME NULL DEFAULT (GETDATE())
GO
答9:
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。
如果你想添加多个列,你可以这样做,例如:
ALTER TABLE YourTable
ADD Column1 INT NOT NULL DEFAULT 0,
Column2 INT NOT NULL DEFAULT 1,
Column3 VARCHAR(50) DEFAULT 'Hello'
GO
答10:
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。
要将列添加到具有默认值的现有数据库表,我们可以使用:
ALTER TABLE [dbo.table_name]
ADD [Column_Name] BIT NOT NULL
Default ( 0 )
这是将列添加到具有默认值的现有数据库表的另一种方法。
下面是一个更彻底的 SQL 脚本,用于添加具有默认值的列,包括在添加列之前检查列是否存在,还检查约束并在存在约束时将其删除。该脚本还为约束命名,这样我们就可以有一个很好的命名约定(我喜欢 DF_),如果不是,SQL 会给我们一个具有随机生成数字的名称的约束;所以也很高兴能够命名约束。
-------------------------------------------------------------------------
-- Drop COLUMN
-- Name of Column: Column_EmployeeName
-- Name of Table: table_Emplyee
--------------------------------------------------------------------------
IF EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_Emplyee'
AND COLUMN_NAME = 'Column_EmployeeName'
)
BEGIN
IF EXISTS ( SELECT 1
FROM sys.default_constraints
WHERE object_id = OBJECT_ID('[dbo].[DF_table_Emplyee_Column_EmployeeName]')
AND parent_object_id = OBJECT_ID('[dbo].[table_Emplyee]')
)
BEGIN
------ DROP Contraint
ALTER TABLE [dbo].[table_Emplyee] DROP CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]
PRINT '[DF_table_Emplyee_Column_EmployeeName] was dropped'
END
-- ----- DROP Column -----------------------------------------------------------------
ALTER TABLE [dbo].table_Emplyee
DROP COLUMN Column_EmployeeName
PRINT 'Column Column_EmployeeName in images table was dropped'
END
--------------------------------------------------------------------------
-- ADD COLUMN Column_EmployeeName IN table_Emplyee table
--------------------------------------------------------------------------
IF NOT EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_Emplyee'
AND COLUMN_NAME = 'Column_EmployeeName'
)
BEGIN
----- ADD Column & Contraint
ALTER TABLE dbo.table_Emplyee
ADD Column_EmployeeName BIT NOT NULL
CONSTRAINT [DF_table_Emplyee_Column_EmployeeName] DEFAULT (0)
PRINT 'Column [DF_table_Emplyee_Column_EmployeeName] in table_Emplyee table was Added'
PRINT 'Contraint [DF_table_Emplyee_Column_EmployeeName] was Added'
END
GO
这是将列添加到具有默认值的现有数据库表的两种方法。
答11:
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
利用:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
参考:ALTER TABLE (Transact-SQL)(MSDN)
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!