前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL Server删除带“默认值”字段的需求探索

SQL Server删除带“默认值”字段的需求探索

作者头像
bisal
发布2021-11-19 09:37:22
1.5K0
发布2021-11-19 09:37:22
举报
文章被收录于专栏:bisal的个人杂货铺

某位兄弟问了一个问题,“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,删除默认值,

1bd0a271dcbff82218852546bc2cd6e1.png
1bd0a271dcbff82218852546bc2cd6e1.png

2. 如果默认值,已经绑定到列,则需要解绑,才可用alter table ... drop column ...,删除列,

74f4bfcc8cb541e5806c28736a2c5da1.png
74f4bfcc8cb541e5806c28736a2c5da1.png

提醒一下,在SQL Server 2019的下一个版本,将不支持DROP DEFAULT,

52645bb38006f3f85b8f2bbd20644eb2.png
52645bb38006f3f85b8f2bbd20644eb2.png

不同的数据库,在一些功能上,还是有些区别,官方文档,就是我们寻找线索最重要的途径之一。每个功能,都会有他的设计和用意,这就需要我们在用的过程中,深深体会了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/11/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档