相信很多朋友对利用SQL创建表已经很熟悉了,但我们发现在创建表的同时不能像添加默认值或者主键一样为列加上说明信息,所以我们经常是创建表后再到表的可视化设计器中为列加上说明,这样操作起来就相当麻烦了,本篇我们主要讨论如何利用SQL在创建表时为列加上说明信息。

我们先创建一个测试表:

if exists(select 1 from sys.tables where object_id=object_id('test'))
     begin
        drop table test
    end
    create table test
    (
        col1 varchar(50),
        col2 varchar(50)
    )

这个我们已经很熟悉了,那么怎么为列col1及col2加上说明信息呢?
这就要用到系统存储过程sp_addextendedproperty。
在添加之前我们先看一下sp_addextendedproperty的语法:

sp_addextendedproperty
    [ @name = ] { 'property_name' }
    [ , [ @value = ] { 'value' } 
        [ , [ @level0type = ] { 'level0_object_type' } 
                    , [ @level0name = ] { 'level0_object_name' } 
                [ , [ @level1type = ] { 'level1_object_type' } 
                                    , [ @level1name = ] { 'level1_object_name' } 
                        [ , [ @level2type = ] { 'level2_object_type' } 
                                                    , [ @level2name = ] { 'level2_object_name' } 
                        ] 
                ]
        ] 
    ] 

该存储过程一共有8个参数,估计初学者一看就晕了,不要着急,我们可以通过实例来理解,下面我们先利用sp_addextendedproperty为col1列加上说明:

execute sp_addextendedproperty N'MS_Description',N'这是测试列1',N'SCHEMA',N'dbo',N'table',N'test',N'column',N'col1'

上面就是为列col1加上说明的SQL命令,来理解一下:
虽然sp_addextendedproperty有8个参数,但我们可以把这个8个参数理解为4对,其实看参数名我们也可以猜出大概了:
@name与@value为一对
@level0type与@level0name为一对
@level1type与@level1name为一对
@level2type与@level2name为一对

那么这4对参数分别代表什么呢?
1,@name与@value
@name:指定我们是要为列添加什么信息,比如我们要为列添加扩展信息,那么@name就等于'Caption',本篇是要为列添加说明信息,所以@name等于'MS_Description'
@value:指定与@name关联的值,本篇也就是列的具体说明。

2,@level0type与@level0name
@level0type:指定我们要修改的列的表所于那个数据库架构,所以它等于'SCHEMA',有些网上教程中会说它也可以等于'user',但在sql server的未来版本中,将删除'user',所以推荐大家用'SCHEMA'
@level0name:指定我们要修改的表所在架构的名称

3,@level1type与@level1name
@level1type:指明我们要修改的列所属对象是表,还是视图等。本篇是修改表中的列,所以为'table',
@@level1name: 指明要修改的列所属表的名称

4,@level2type与@level2name
@level2type:指明我们要修改的对象是列,还是主键,还是约束等。本篇修改的是列,所以为'column'
@level2name:指明要修改列的列名

到此,我们应该了解sp_addextendedproperty中各参数的意思了,完整的SQL命令如下:

if exists(select 1 from sys.tables where object_id=object_id('test'))
    begin
        drop table test
    end
    create table test
    (
        col1 varchar(50),
        col2 varchar(50)
    )

execute sp_addextendedproperty N'MS_Description',N'这是测试列1',N'SCHEMA',N'dbo',N'table',N'test',N'column',N'col1'

execute sp_addextendedproperty N'MS_Description',N'这是测试列2',N'SCHEMA',N'dbo',N'table',N'test',N'column',N'col2'

执行命令后通过如下查询语句来验证我们的结果:

select B.Name,A.value from sys.extended_properties A 
    inner join sys.columns B on A.major_id=B.object_id 
    and A.minor_id=B.column_id
    where A.major_id=object_id('test')

执行,返回的结果如下:
Name  value
col1  这是测试列1
col2  这是测试列2

创建表时同时为表中的列添加说明信息我们已经完成了,那么,我们要如何利用SQL来修改列的说明信息呢?利用系统存储过程sp_updateextendedproperty,它的用法和sp_addextendedproperty一样,就不多加说明了,修改示例如下:

execute sp_updateextendedproperty N'MS_Description',N'这是修改后的测试列1',N'SCHEMA',N'dbo',N'table',N'test',N'column',N'col1'

execute sp_updateextendedproperty N'MS_Description',N'这是修改后的测试列2',N'SCHEMA',N'dbo',N'table',N'test',N'column',N'col2'

同样利用上面的SQL语句查询修改后的结果:
Name  value
col1  这是修改后的测试列1
col2  这是修改后的测试列2

SQL---存储过程---sp_addextendedproperty表字段加描述的更多相关文章

  1. SQL比较两表字段和字段类型

    一.问题 业务需要把TB_Delete_KYSubProject表数据恢复到TB_KYSubProject,但提示错误,错误原因是两表字段类型存在不一致 insert into [TB_KYSubPr ...

  2. 获取、增加、修改、删除sqlserver字段描述及快速查看表字段与描述

    先看添加与删除字段描述 EXEC sys.sp_addextendedproperty @name = N'MS_Description', --添加Type字段说明 @value = N'屏蔽类型对 ...

  3. sql server 删除表字段和字段的约束

    删除数据库表中的字段时,使用了 :alter table 表名 drop column 列名 服务器返回的错误为:Server: Msg 5074, Level 16, State 1, Line 1 ...

  4. SQL查询数据库表字段值不为空或Null的所有列

    ) set @TableName = 'Agency' -- 表名 declare @querySql nvarchar(max) set @querySql = 'select ' ) declar ...

  5. 【SQL Server 学习系列】-- SQL查询数据库表字段值不为空或Null的所有列

    ) set @TableName = 'Agency' -- 表名 declare @querySql nvarchar(max) set @querySql = 'select ' ) declar ...

  6. SQL语句修改表字段名/修改字段长度/增加字段/删除字段

    修改字段名Exec sp_rename 'zxchem_Suggest.End_Date','Yj_Finish_Date','Column' 修改字段长度Alter Table zxchem_Sug ...

  7. SQL Server 联表字段合并查询

    经常遇到统计报表中,子表记录合并为一个字段的情况.例如:省表中各省经济水平前五的城市统计. 有如下两表:dbo.省 和 dbo.市 (好吧,你可能会吐槽为什么用中文表名,其实我是为了方便查找替换) 这 ...

  8. SQL动态更新表字段 传入字段可能为空

    小技巧: 项目组有修改产品的基本信息字段 但有时候传入的字段可能为空 也可能不为空  动态修改表中字段. USE [BetaProductMarket_DB] GO )) BEGIN DROP PRO ...

  9. sql server 修改表字段信息

    alter table oa_archives_folder alter column folder_category varchar(200)

随机推荐

  1. 笨鸟先飞之ASP.NET MVC系列之过滤器(05结果过滤器)

    概念介绍 结果过滤器看名字就知道这个过滤器是针对方法所产生结果的,结果过滤器,主要在我们的动作方法结果返回前后执行. 如果我们需要创建结果过滤器需要实现IResultFilter接口. namespa ...

  2. 张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块

    HC-SR04 采用 IO 触发测距.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 C# 进行编码. 1. 准备 H ...

  3. 【转】NOR Flash擦写和原理分析

    1. NOR FLASH 的简单介绍 NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直接在FLASH片内执行(这意味着存 ...

  4. 【面向对象】详解之JavaScript篇

    [重点提前说:面向对象的思想很重要!] 最近开始接触学习后台的PHP语言,在接触到PHP中的面向对象相关思想之后,突然想到之前曾接触的JS中的面向对象思想,无奈记性太差,便去翻了翻资料,花了点时间梳理 ...

  5. Linux系统查找

    1. which:在当前用户环境变量path指定的路径下查找可执行程序/文件. 特点:(1)只在当前用户环境变量指定的路径下查找: (2)只找出可执行程序/文件的位置: (3)查找速度非常快. 注:使 ...

  6. 初识.Net IL

    1.IL基本资料 1.IL概述 IL是.NET框架中中间语言(Intermediate Language)的缩写.使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出 ...

  7. python去除读取文件中多余的空行

    今天在写登录程序练习的时候,黑名单文件中多了几行空行.导致运行的时候报错:IndexError: list index out of range 代码 brackData = open(brackDa ...

  8. Python CRM项目一

    开发环境: 语言Python3.X以上 MTV WEB框架 Django 前端框架 jQuery+bootstrap 数据库 MySQL 运行环境 安装Python3.x 安装Django 除IE8以 ...

  9. Muduo阅读笔记--base(二)

    上一篇文章对muduo的入门做了介绍. http://www.cnblogs.com/LCCRNblog/p/5668035.html base文件夹下这么多代码,该如何入手呢?对于我这种第一次接触大 ...

  10. Shape of HDU

    Shape of HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...