某位兄弟问了一个问题,“SQL server中怎么删除带默认值的字段”?
这是什么意思?
我们知道,在Oracle中,不管你带不带默认值,删除字段就是alter table ... drop column ...,为什么到了SQL Server,有其他的讲究?
原来这个SQL Server的字段,不是普通定义的表字段,而是通过这几个操作定义的。
1. 创建一个默认值对象,
代码语言:javascript复制if not exists
(select 1 from sys.sysobjects where uid=schema_id(schema_name())
and name like 'chardt' and xtype = 'D')
exec sp_executesql N'create default [chardt] as '''''
2. 创建一个类型,
代码语言:javascript复制if not exists
(select 1 from sys.systypes where uid=schema_id(schema_name())
and name = 'dtkind')
create type [dtkind] from char(1) not null
3. 绑定这个类型的默认值是刚才创建的chardt,
代码语言:javascript复制绑定这个类型的默认值是chardft
exec sp_bindefault chardt, dtkind
创建表的时候,列c定义为dtkind类型,删除这个列c,应该怎么做?
代码语言:javascript复制create table t
(
...
c dtkind,
...
)
go
针对这个场景,微软的官方文档,给出了解释,
https://docs.microsoft.com/en-us/sql/t-sql/statements/drop-default-transact-sql?view=sql-server-ver15
1. 如果默认值,还未绑定到列,可以用DROP DEFAULT,删除默认值,
2. 如果默认值,已经绑定到列,则需要解绑,才可用alter table ... drop column ...,删除列,
提醒一下,在SQL Server 2019的下一个版本,将不支持DROP DEFAULT,
不同的数据库,在一些功能上,还是有些区别,官方文档,就是我们寻找线索最重要的途径之一。每个功能,都会有他的设计和用意,这就需要我们在用的过程中,深深体会了。