如何将具有默认值的列添加到SQL Server 2000/SQL Server 2005中的现有表中?
当前回答
向表中添加新列:
ALTER TABLE [table]
ADD Column1 Datatype
例如
ALTER TABLE [test]
ADD ID Int
如果用户希望使其自动递增,则:
ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
其他回答
如果要添加多个列,可以通过以下方式进行:
ALTER TABLE YourTable
ADD Column1 INT NOT NULL DEFAULT 0,
Column2 INT NOT NULL DEFAULT 1,
Column3 VARCHAR(50) DEFAULT 'Hello'
GO
ALTER TABLE ADD ColumnName {Column_Type} Constraint
MSDN文章ALTERTABLE(Transact-SQL)具有所有altertable语法。
好吧,我现在对我之前的回答做了一些修改。我注意到,没有一个答案提到“如果不存在”。因此,我将提供一个新的解决方案,因为我在改变表格时遇到了一些问题。
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]
这可以通过以下代码完成。
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
向表中添加新列:
ALTER TABLE [table]
ADD Column1 Datatype
例如
ALTER TABLE [test]
ADD ID Int
如果用户希望使其自动递增,则:
ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
推荐文章
- SQL Server数据库备份恢复到低版本
- 在MySQL中检测值是否为number
- MySQL中两个日期之间的差异
- SQL Server:过滤sp_who2的输出
- 使用SQL查询查找最近的纬度/经度
- 在SQL Server上使用varchar(MAX) vs TEXT
- Visual Studio: ContextSwitchDeadlock
- Sql Server字符串到日期的转换
- 将一列的多个结果行连接为一列,按另一列分组
- 检查MySQL表是否存在而不使用“select from”语法?
- 如何将SQL Azure数据库复制到本地开发服务器?
- SQL Server 2008不能用新创建的用户登录
- 在PostgreSQL中快速发现表的行数
- 更改varchar列的大小为较低的长度
- 从表中选择1是什么意思?