ANP*_*ANP 109 sql-server alter-table notnull
我试过了:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Run Code Online (Sandbox Code Playgroud)
但它给出了此错误消息:
ALTER TABLE仅允许添加可包含空值或指定了DEFAULT定义的列
Pav*_*yuk 201
作为一个选项,您最初可以创建Null-able列,然后使用有效的非null值更新表列,最后使用ALTER列设置NOT NULL约束:
ALTER TABLE MY_TABLE ADD STAGE INT NULL
GO
UPDATE MY_TABLE SET <a valid not null values for your column>
GO
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL
GO
Run Code Online (Sandbox Code Playgroud)
另一种选择是为列指定正确的默认值:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
Run Code Online (Sandbox Code Playgroud)
UPD:请注意,上面的答案包含GO在Microsoft SQL服务器上运行此代码时必须使用的内容.如果要在Oracle或MySQL上执行相同的操作,则需要使用分号;:
ALTER TABLE MY_TABLE ADD STAGE INT NULL;
UPDATE MY_TABLE SET <a valid not null values for your column>;
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL;
Run Code Online (Sandbox Code Playgroud)
Mar*_*ith 12
如果您不允许列为空,则需要提供默认值来填充现有行.例如
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
Run Code Online (Sandbox Code Playgroud)
在Enterprise Edition上,这是自2012年以来仅元数据的更改
Joh*_*han 11
更快的解决方案
如果您像我一样需要在包含大量数据的表上执行此操作,则 ADD-UPDATE-ALTER 选项非常慢(对于数百万行可能需要数小时)。
如果您也不希望表上有默认值,这里是创建列并删除默认约束的完整代码(即使对于大型表也几乎是即时的):
ALTER TABLE my_table ADD column_name INT NOT NULL CONSTRAINT my_table_default_constraint DEFAULT 0
GO
ALTER TABLE my_table DROP CONSTRAINT my_table_default_constraint
GO
Run Code Online (Sandbox Code Playgroud)
这是针对 SQL Server 的
错误消息非常具有描述性,请尝试:
ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
189448 次 |
| 最近记录: |