如何将具有默认值的列添加到SQL Server 2000/SQL Server 2005中的现有表中?
当前回答
尝试以下查询:
ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue
这将在表中添加一个新列。
其他回答
您可以通过以下方式使用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]
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
有两种不同的方法来解决这个问题。两者都添加了一个默认值,但在这里为问题语句添加了完全不同的含义。
让我们从创建一些示例数据开始。
创建示例数据
CREATE TABLE ExistingTable (ID INT)
GO
INSERT INTO ExistingTable (ID)
VALUES (1), (2), (3)
GO
SELECT *
FROM ExistingTable
1.为以后的插入添加具有默认值的列
ALTER TABLE ExistingTable
ADD ColWithDefault VARCHAR(10) DEFAULT 'Hi'
GO
因此,现在我们在插入新记录时添加了一个默认列,如果没有提供值,它将默认值为“Hi”
INSERT INTO ExistingTable(ID)
VALUES (4)
GO
Select * from ExistingTable
GO
这解决了我们的问题,即默认值,但这里有一个解决问题的方法。如果我们希望在所有列中都有默认值,而不仅仅是将来的插入,该怎么办???为此,我们有方法2。
2.为所有插入添加具有默认值的列
ALTER TABLE ExistingTable
ADD DefaultColWithVal VARCHAR(10) DEFAULT 'DefaultAll'
WITH VALUES
GO
Select * from ExistingTable
GO
以下脚本将在每个可能的场景中添加一个具有默认值的新列。
希望这能为提出的问题增加价值。谢谢
ALTER TABLE <YOUR_TABLENAME>
ADD <YOUR_COLUMNNAME> <DATATYPE> <NULL|NOT NULL>
ADD CONSTRAINT <CONSTRAINT_NAME> ----OPTIONAL
DEFAULT <DEFAULT_VALUE>
如果您没有提供约束名称,那么SQLServer将使用默认名称。
示例:-
ALTER TABLE TEMP_TABLENAME
ADD COLUMN1 NUMERIC(10,0) NOT NULL
ADD CONSTRAINT ABCDE ----OPTIONAL
DEFAULT (0)
推荐文章
- 在SQL中更新多个列
- 如何删除表中特定列的第一个字符?
- MySQL OR与IN性能
- 哪个更快/最好?SELECT *或SELECT columnn1, colum2, column3等
- GROUP BY with MAX(DATE)
- 删除id与其他表不匹配的sql行
- 等价的限制和偏移SQL Server?
- 如何从SQL Server中的字符串中剥离所有非字母字符?
- 为什么我不能在DELETE语句中使用别名?
- 在SQL Server Management Studio中保存带有标题的结果
- "where 1=1"语句
- 如何选择一个记录和更新它,与一个单一的查询集在Django?
- 多语句表值函数vs内联表值函数
- 如何从Oracle的表中获取列名?
- NOLOCK提示在SELECT语句中的作用