SQL Server删除带“默认值”字段的需求探索
2023-03-15 22:02:28 时间
某位兄弟问了一个问题,“SQL server中怎么删除带默认值的字段”?
这是什么意思?
我们知道,在Oracle中,不管你带不带默认值,删除字段就是alter table ... drop column ...,为什么到了SQL Server,有其他的讲究?
原来这个SQL Server的字段,不是普通定义的表字段,而是通过这几个操作定义的。
1. 创建一个默认值对象,
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. 创建一个类型,
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,
绑定这个类型的默认值是chardft
exec sp_bindefault chardt, dtkind
创建表的时候,列c定义为dtkind类型,删除这个列c,应该怎么做?
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,
不同的数据库,在一些功能上,还是有些区别,官方文档,就是我们寻找线索最重要的途径之一。每个功能,都会有他的设计和用意,这就需要我们在用的过程中,深深体会了。
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十