ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
888
如果要添加多个列,可以这样做,例如:
ALTER TABLE YourTable
ADD Column1 INT NOT NULL DEFAULT 0,
Column2 INT NOT NULL DEFAULT 1,
Column3 VARCHAR(50) DEFAULT 'Hello'
GO
39
ALTER TABLE <table name>
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name>
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO
84
这可以通过以下代码完成 .
CREATE TABLE TestTable
(FirstCol INT NOT NULL)
GO
------------------------------
-- Option 1
------------------------------
-- Adding New Column
ALTER TABLE TestTable
ADD SecondCol INT
GO
-- Updating it with Default
UPDATE TestTable
SET SecondCol = 0
GO
-- Alter
ALTER TABLE TestTable
ALTER COLUMN SecondCol INT NOT NULL
GO
16
SQL Server更改表添加列默认值uniqueidentifier ...
ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO
14
最基本的版本只有两行
ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
ALTER TABLE {schemaName}.{tableName}
ADD {columnName} {datatype} NULL
CONSTRAINT {constraintName} DEFAULT {DefaultValue}
UPDATE {schemaName}.{tableName}
SET {columnName} = {DefaultValue}
WHERE {columName} IS NULL
ALTER TABLE {schemaName}.{tableName}
ALTER COLUMN {columnName} {datatype} NOT NULL
WHILE 1=1
BEGIN
UPDATE TOP (1000000) {schemaName}.{tableName}
SET {columnName} = {DefaultValue}
WHERE {columName} IS NULL
IF @@ROWCOUNT < 1000000
BREAK;
END
26
试试这个
ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
16
语法:
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.
Optional With-Values Statement: 仅当Column为Nullable时才需要 WITH VALUES 并且您想要用于现有记录的默认值 . 如果您的列是 NOT NULL ,那么它将自动使用默认值 对于所有现有记录,无论您是否指定 WITH VALUES .
How Inserts work with a Default-Constraint: 如果您将记录插入 SomeTable 并执行 not 指定 SomeCol 的值,则它将默认为 0 . 如果您插入记录 and 指定 SomeCol 的值为 NULL (并且您的列允许空值), 然后使用默认约束 not 并将 NULL 作为值插入 .
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)
从此查询中,您可以添加一个数据类型为整数的列,其默认值为0 .
6
IF NOT EXISTS (
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME ='TABLENAME' AND COLUMN_NAME = 'COLUMNNAME'
)
BEGIN
ALTER TABLE TABLENAME ADD COLUMNNAME Nvarchar(MAX) Not Null default
END
3032
ALTER TABLE ADD ColumnName {Column_Type} Constraint
ALTER TABLE Product
ADD ReferenceID uniqueidentifier not null
default (cast(cast(0 as binary) as uniqueidentifier))
67
好吧,我现在对我以前的答案进行了一些修改 . 我注意到没有提到 IF NOT EXISTS 的答案 . 所以我将提供一个新的解决方案,因为我遇到了一些改变表格的问题 .
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
-------------------------------------------------------------------------
-- 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
这两种方法是使用默认值将列添加到现有数据库表 .
41
添加可为空的列时, WITH VALUES 将确保将特定的DEFAULT值应用于现有行:
ALTER TABLE table
ADD column BIT -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
请注意,要添加的列具有 NOT NULL 约束,但没有 DEFAULT 约束(值) . 如果表中有任何行,则 ALTER TABLE 语句将失败 . 解决方案是从新列中删除 NOT NULL 约束,或为其提供 DEFAULT 约束 .
110
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
11
使用:
-- Add a column with a default DateTime
-- to capture when each record is added.
ALTER TABLE myTableName
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())
GO
30 回答
向表中添加新列:
For example,
如果用户想要使其自动递增,则:
如果要添加多个列,可以这样做,例如:
这可以通过以下代码完成 .
SQL Server更改表添加列默认值uniqueidentifier ...
最基本的版本只有两行
如果默认值为Null,则:
在SQL Server中,打开目标表的树
右键单击"Columns" ==>
New Column
键入列名称
Select Type
,然后选中允许空值复选框在菜单栏中,单击
Save
完成!
这有很多答案,但我觉得需要添加这个扩展方法 . 这看起来要长得多,但如果你在一个活动数据库中有数百万行的表中添加一个NOT NULL字段,它就非常有用 .
这样做是将列添加为可空字段并使用默认值,将所有字段更新为默认值(或者您可以指定更有意义的值),最后它将列更改为NOT NULL .
这样做的原因是,如果您更新一个大型表并添加一个新的非空字段,它必须写入每一行,因此会在添加列时锁定整个表,然后写入所有值 .
此方法将添加可自然操作的可为空的列,然后在设置非空状态之前填充数据 .
我发现在一个语句中完成整个操作会锁定一个更活跃的表,持续4-8分钟,而且我经常杀死这个过程 . 这种方法每个部分通常只需几秒钟,并导致最小的锁定 .
此外,如果您在数十亿行的区域中有一个表,则可能需要对更新进行批处理,如下所示:
试试这个
语法:
示例:
注意:
Optional Constraint Name:
如果省略
CONSTRAINT D_SomeTable_SomeCol
则SQL Server将自动生成一个有趣的名字的默认约束,如:
DF__SomeTa__SomeC__4FB7FEF6
Optional With-Values Statement:
仅当Column为Nullable时才需要
WITH VALUES
并且您想要用于现有记录的默认值 .
如果您的列是
NOT NULL
,那么它将自动使用默认值对于所有现有记录,无论您是否指定
WITH VALUES
.How Inserts work with a Default-Constraint:
如果您将记录插入
SomeTable
并执行 not 指定SomeCol
的值,则它将默认为0
.如果您插入记录 and 指定
SomeCol
的值为NULL
(并且您的列允许空值),然后使用默认约束 not 并将
NULL
作为值插入 .笔记基于以下每个人的好评 .
特别感谢:
@Yatrix,@ WalterStabosz,@ YahooSerious和@StackMan的评论 .
从此查询中,您可以添加一个数据类型为整数的列,其默认值为0 .
MSDN文章ALTER TABLE (Transact-SQL)具有所有alter table语法 .
使用:
参考:ALTER TABLE (Transact-SQL)(MSDN)
SQL Server更改表添加列默认值uniqueidentifier
好吧,我现在对我以前的答案进行了一些修改 . 我注意到没有提到
IF NOT EXISTS
的答案 . 所以我将提供一个新的解决方案,因为我遇到了一些改变表格的问题 .这里
TaskSheet
是特定的表名,IsBilledToClient
是您要插入的新列,而1
是默认值 . 这意味着在新列中将是现有行的值,因此将在那里自动设置一个 . 但是,您可以根据列类型进行更改,就像我使用BIT
一样,因此我输入默认值1 .我建议上面的系统,因为我遇到了一个问题 . 那么问题是什么?问题是,如果表中存在
IsBilledToClient
列,那么如果只执行下面给出的代码部分,则会在SQL Server“查询”构建器中看到错误 . 但如果它不存在那么第一次执行时就不会有错误 .或者,您可以添加默认值而无需明确命名约束:
如果在创建此约束时遇到现有默认约束的问题,则可以通过以下方式删除它们:
要使用默认值将列添加到现有数据库表,我们可以使用:
下面是使用默认值将列添加到现有数据库表的另一种方法 .
下面是一个更加彻底的SQL脚本,用于添加具有默认值的列,包括在添加列之前检查列是否存在,也检查如果存在约束并将其删除 . 这个脚本也命名约束,所以我们可以有一个很好的命名约定(我喜欢DF_),如果不是,SQL会给我们一个带有随机生成数字的名称的约束;所以能够命名约束也很好 .
这两种方法是使用默认值将列添加到现有数据库表 .
添加可为空的列时,
WITH VALUES
将确保将特定的DEFAULT值应用于现有行:这也可以在SSMS GUI中完成 . 我在下面显示默认日期,但当然默认值可以是任何值 .
将表放在设计视图中(右键单击object explorer-> Design中的表)
向表中添加一列(如果已存在,则单击要更新的列)
在下面的列属性中,输入
(getdate())
或abc
或0
或默认值或绑定字段中所需的任何值,如下图所示:例:
您可以通过以下方式使用T-SQL执行此操作 .
您还可以通过右键单击“设计”菜单中的表来使用SQL Server Management Studio,将默认值设置为表格 .
此外,如果要将相同的列(如果它不存在)添加到数据库中的所有表,则使用:
包含 DEFAULT 将使用默认值填充 existing 行中的列,因此不会违反NOT NULL约束 .
例:
First create a table with name student:
Add one column to it:
将创建该表,并使用默认值将列添加到现有表中 .
在SQL Server 2008-R2中,我进入设计模式 - 在测试数据库中 - 使用设计器添加我的两列并使用GUI进行设置,然后臭名昭着的右键单击提供选项“ Generate Change Script ”!
Bang up弹出一个小窗口,您猜对了,正确格式化的保证工作更改脚本 . 按下简单按钮 .
请注意,要添加的列具有
NOT NULL
约束,但没有DEFAULT
约束(值) . 如果表中有任何行,则ALTER TABLE
语句将失败 . 解决方案是从新列中删除NOT NULL
约束,或为其提供DEFAULT
约束 .使用: