代码分享-SQLServer设置表或者列的说明
在SQLServer数据库中,是可以设置表或者列的注释说明的,但是还比较复杂,而且分成新增和修改两个不同的
存储过程,这就意味着你可能得切换,当表本身已经有说明的时候,
你就必须调用更新的存储过程,否则的话就用新增的。具体的例子如下:标准方式使用如下:
--新增时EXEC sys.sp_addextendedproperty @name = NULL, -- sysname@value = NULL, -- sql_variant@level0type = '', -- varchar(128)@level0name = NULL, -- sysname@level1type = '', -- varchar(128)@level1name = NULL, -- sysname@level2type = '', -- varchar(128)@level2name = NULL -- sysname--修改时EXEC sys.sp_updateextendedproperty @name = NULL, -- sysname@value = NULL, -- sql_variant@level0type = '', -- varchar(128)@level0name = NULL, -- sysname@level1type = '', -- varchar(128)@level1name = NULL, -- sysname@level2type = '', -- varchar(128)@level2name = NULL -- sysname
这里提供一个存储过程,用于直接调用,无须考虑当前是新增还是更新。具体代码与参数说明如下:
--具体的参数以及说明如下,可用于对表,视图,以及列进行添加说明。
ALTER PROC [dbo].[AddOrUpdExtendedproperty]
(@Type NVARCHAR(100), -- 'Table/Column/View',视图或者表的时候填Table/Column都可以@Schema NVARCHAR(100), @TableName NVARCHAR(100),--表名/视图名@ColumnName NVARCHAR(100), --列名@Description NVARCHAR(200) --说明
)
AS DECLARE @Level1Type NVARCHAR(100) = (SELECT TOP 1[object].[type] FROM sys.objects [object]INNER JOIN sys.schemas [schema] ON [object].[schema_id]= [schema].[schema_id]WHERE [schema].name + '.' + [object].name = @Schema + '.' + @TableName)IF @Level1Type NOT IN ('U','V') BEGINRETURN;END IF @Level1Type = N'V' BEGINSET @Level1Type = N'View'ENDELSEBEGINSET @Level1Type = 'Table'END if object_id('tempdb..#tmp_DescDt') is not null drop table #tmp_DescDtSELECT SchemaName,TableName,TableDesc,TableDescExists,ColName,ColDesc,ColDescExists INTO #tmp_DescDt FROM (SELECT i.name AS SchemaName,d.name AS TableName,isnull(f.value,'') AS TableDesc,CASE WHEN f.Value IS NULL OR f.Value = NULL THEN 0 ELSE 1 END TableDescExists,a.name AS ColName,isnull(g.[value],'') AS ColDesc,CASE WHEN g.Value IS NULL OR g.Value = NULL THEN 0 ELSE 1 END ColDescExists FROM syscolumns aleft join systypes b on a.xusertype=b.xusertypeinner join sysobjects d on a.id=d.id and (d.xtype='U' OR d.xtype = 'V') and d.name<>'dtproperties'left join syscomments e on a.cdefault=e.idleft join sys.extended_properties g on a.id=G.major_id and a.colid=g.minor_id left joinsys.extended_properties fon d.id=f.major_id and f.minor_id=0LEFT JOIN sys.tables h ON OBJECT_ID = d.idLEFT JOIN sys.schemas i ON h.schema_id= i.[schema_id]WHERE i.name + '.' + d.name=@Schema + '.'+@TableName --如果只查询指定表,加上此where条件,tablename是要查询的表名;去除where条件查询所有的表信息UNION ALL SELECT i.name AS SchemaName,d.name AS TableName,isnull(f.value,'') AS TableDesc,CASE WHEN f.Value IS NULL OR f.Value = NULL THEN 0 ELSE 1 END TableDescExists,a.name AS ColName,isnull(g.[value],'') AS ColDesc,CASE WHEN g.Value IS NULL OR g.Value = NULL THEN 0 ELSE 1 END ColDescExists FROM syscolumns aleft join systypes b on a.xusertype=b.xusertypeleft join sysobjects d on a.id=d.id and (d.xtype='U' OR d.xtype = 'V') and d.name<>'dtproperties'left join syscomments e on a.cdefault=e.idleft join sys.extended_properties g on a.id=G.major_id and a.colid=g.minor_id left joinsys.extended_properties fon d.id=f.major_id and f.minor_id=0LEFT JOIN sys.views h ON OBJECT_ID = d.idLEFT JOIN sys.schemas i ON h.schema_id= i.[schema_id]where i.name + '.' + d.name= @Schema + '.'+@TableName --如果只查询指定表,加上此where条件,tablename是要查询的表名;去除where条件查询所有的表信息) AS a IF NOT EXISTS (SELECT 1 FROM sys.tables h INNER JOIN sys.schemas i ON h.schema_id= i.[schema_id] WHERE h.name = @TableName AND i.name = @Schema) AND @Level1Type = 'Table'BEGIN--表不存在RETURN;END IF ISNULL(@ColumnName,'') <> N'' AND @Type = N'Column' AND NOT EXISTS (SELECT 1 FROM #tmp_DescDt WHERE TableName = @TableName AND ColName = @ColumnName AND SchemaName = @Schema)BEGIN--列不存在RETURN;END SET @Description = ISNULL(@Description,'')IF @Type = N'Table' OR @Type = N'View'BEGINIF EXISTS (SELECT 1 FROM #tmp_DescDt WHERE ISNULL(TableDesc,'') <> @Description) BEGINIF EXISTS(SELECT 1 FROM #tmp_DescDt WHERE TableDescExists = 1)BEGIN--修改表描述EXEC sys.sp_updateextendedproperty @name=N'MS_Description', @value=@Description , @level0type=N'SCHEMA',@level0name=@Schema, @level1type=@Level1Type,@level1name=@TableNameENDELSEBEGIN--新增表描述EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=@Description , @level0type=N'SCHEMA',@level0name=@Schema, @level1type=@Level1Type,@level1name=@TableNameEND END END IF @Type = N'Column'BEGINIF EXISTS (SELECT 1 FROM #tmp_DescDt WHERE ISNULL(ColDesc,'') <> @Description AND ColName = @ColumnName)BEGINIF EXISTS (SELECT 1 FROM #tmp_DescDt WHERE ColName = @ColumnName AND ColDescExists = 1)BEGIN--修改列描述EXEC sys.sp_updateextendedproperty @name=N'MS_Description', @value=@Description , @level0type=N'SCHEMA',@level0name=@Schema, @level1type=@Level1Type,@level1name=@TableName,@level2type=N'COLUMN',@level2name = @ColumnNameEND ELSEBEGIN--新增表描述EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=@Description , @level0type=N'SCHEMA',@level0name=@Schema, @level1type=@Level1Type,@level1name=@TableName,@level2type=N'COLUMN',@level2name = @ColumnNameEND END END if object_id('tempdb..#tmp_DescDt') is not null drop table #tmp_DescDtGO
代码分享-SQLServer设置表或者列的说明相关推荐
- rails设置表单默认值amp;amp;隐藏表单
需求: 用户没有登录时游客评论,需要游客输入用户名和评论内容:当用户已登录时,读取session获取用户名,隐藏输入用户名的表达,用户直接发表评论. 用户评论代码: <h2>Add a c ...
- mssql sqlserver 添加表注释和添加列注释
摘要: 下文讲述使用sql脚本对数据表或数据列添加注释(备注说明)的方法分享,如下所示: 实验环境:sql server 2008 r2 实现思路: 使用系统存储过程sys.sp_addextende ...
- sqlserver建表(设置主键 外键)约束
一.通过sql命令建表 create table dept (dept_id int primary key,dept_name nvarchar(100) not null,dept_address ...
- python代码大全表解释-Python中顺序表的实现简单代码分享
顺序表python版的实现(部分功能未实现) 结果展示: 代码示例: #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object ...
- 前端页面与form表单提交:代码分享
今天分享下"前端页面与form表单提交:代码分享"这篇文章,文中根据实例编码详细介绍,或许对大家的编程之路有着一定的参考空间与使用价值,需要的朋友接下来跟着云南仟龙Mark一起学习 ...
- sql+php修改mysql结构,MSSQL_修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库,具体不废话了,请看下文代码 - phpStudy...
修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库 具体不废话了,请看下文代码详细说明吧. 向表中增加一个 varchar 列: ALTER TABLE distributors ...
- Airlaunch 快捷设置代码分享
Airlaunch 快捷设置代码分享 设置:prefs:root=SETTING 蜂窝网络:prefs:root=MOBILE_DATA_SETTINGS_ID WIFI:prefs:root=WIF ...
- antd 设置表头属性_解决react使用antd table组件固定表头后,表头和表体列不对齐以及配置fixed固定左右侧后行高度不对齐...
一.固定表头后表体列和表头不对齐 此问题可能在antd3.24.0版本之前都存在,反正3.16.2版本是存在这个问题的,如果是3.24.0之前的版本估计只能通过修改css样式解决. 按照官网说的: 1 ...
- mysql的四个默认数据库是什么版本,MySQL5.7数据库字符集和排序规则有四个级别的默认设置:服务器,数据库,表和列。...
MySQL5.7数据库字符集和排序规则有四个级别的默认设置:服务器,数据库,表和列. 最初,服务器字符集和排序规则取决于启动mysqld时使用的选项.可以使用 --character-set-serv ...
最新文章
- dataframe 按条件删行_根据列值删除Pandas中的DataFrame行
- 关于多线程Thread.Stop()破坏原子性
- 常使用的webserver地址
- 使用jQuery异步传递含复杂属性及集合属性的Model到控制器方法
- 一段挂起进程中所有线程的代码
- berkeley db java edition 源码,Berkeley DB Java Edition
- nodejs express使用HTML模板
- 趣文:如何成为Google软件工程师?(二)
- 产品经理技能树之 需求规范
- mysql驱动和url在5.7以上版本变化
- CCNA考试题库中英文翻译版及答案7
- Excel的高级筛选——数据匹配
- 数据分析初试:“梧桐杯”中国移动大数据应用创新大赛 - 智慧城市赛道
- oracle 11g Dataguard 之 Remote_Transport_user
- 中国互联网老总的经典妙语语录
- 循环神经网络中梯度爆炸的原因
- 前后端分离项目,请求头中包含Authorizaton:XX,但是后端getHeader(Authorizaton) 获取不到
- Point1:STM32根据BRR反推波特率
- 用户体验研究小结—以微信读书APP为例
- python基于win32实现梦幻西游手游后台鼠标键盘