如何将具有默认值的列添加到SQL Server 2000/SQL Server 2005中的现有表中?
当前回答
要使用默认值向现有数据库表中添加列,可以使用:
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
有两种方法可以将列添加到具有默认值的现有数据库表中。
其他回答
这适用于SQL Server:
ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES
例子:
ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES
如果要添加约束,请执行以下操作:
ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES
好吧,我现在对我之前的回答做了一些修改。我注意到,没有一个答案提到“如果不存在”。因此,我将提供一个新的解决方案,因为我在改变表格时遇到了一些问题。
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient')
BEGIN
ALTER TABLE dbo.TaskSheet ADD
IsBilledToClient bit NOT NULL DEFAULT ((1))
END
GO
这里TaskSheet是特定的表名,IsBilledToClient是要插入的新列,1是默认值。这意味着在新列中现有行的值是多少,因此将在那里自动设置一个值。然而,您可以像我使用BIT一样,根据自己的意愿更改列类型,所以我输入了默认值1。
我建议采用上述系统,因为我遇到了一个问题。那么问题出在哪里呢?问题是,如果表表中确实存在IsBilledToClient列,那么如果只执行下面给出的部分代码,则SQL server查询生成器中将出现错误。但如果它不存在,那么第一次执行时将不会出现错误。
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]
试试这个
ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
您可以通过以下方式使用T-SQL完成此操作。
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
此外,您还可以通过右键单击“设计”菜单中的表并将默认值设置为表来使用SQLServerManagementStudio。
此外,若要将同一列(若不存在)添加到数据库中的所有表中,请使用:
USE AdventureWorks;
EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;
或者,可以添加默认值,而不必显式命名约束:
ALTER TABLE [schema].[tablename] ADD DEFAULT ((0)) FOR [columnname]
如果在创建此约束时存在现有默认约束的问题,则可以通过以下方式删除这些约束:
alter table [schema].[tablename] drop constraint [constraintname]
推荐文章
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- 查询JSON类型内的数组元素
- 确定记录是否存在的最快方法
- 获得PostgreSQL数据库中当前连接数的正确查询
- 在SQL选择语句Order By 1的目的是什么?
- 从现有模式生成表关系图(SQL Server)
- 我如何循环通过一组记录在SQL Server?
- 数据库和模式的区别
- 如何在SQL Server中一次更改多个列
- 如何从命令行通过mysql运行一个查询?
- 外键约束可能导致循环或多条级联路径?
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何选择每一行的列值不是独特的