相关推荐recommended
【Sql Server】新手一分钟看懂在已有表基础上增加字段和说明
作者:mmseoamin日期:2024-02-05

欢迎来到《小5讲堂》,大家好,我是全栈小5。

这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解,

特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。

温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

【Sql Server】新手一分钟看懂在已有表基础上增加字段和说明,在这里插入图片描述,第1张

目录

  • 前言
  • 创建表
    • 效果
    • 代码
    • 新增字段
      • 格式
      • 效果
      • 代码
      • 注意事项
      • 设置说明
        • 格式
        • 效果
        • 代码
        • 注意事项
        • 存储过程
        • 文章推荐

          前言

          在实际项目开发中,在整个开发过程中,随着对业务不断优化和深入,当时设计的表结构,

          可能已经无法满足当前需求,需要增加或者移除一些字段,本篇文章将展示如何在已有表基础上增加表字段和备注说明

          创建表

          效果

          【Sql Server】新手一分钟看懂在已有表基础上增加字段和说明,在这里插入图片描述,第2张

          代码

          假设我们增加如下表结构

          -- 创建表
          create table my_table_name
          (
              id int identity(1,1) primary key,
              name_text varchar(50),
              create_time datetime
          )
          

          新增字段

          格式

          新增字段的格式:alter table 这里写自己的表名 add 字段名 数据类型

          效果

          【Sql Server】新手一分钟看懂在已有表基础上增加字段和说明,在这里插入图片描述,第3张

          代码

          -- 增加字段
          alter table my_table_name add value_text nvarchar(50)
          

          注意事项

          必须在已有表基础上才能增加,否则肯定是无法添加成功

          【Sql Server】新手一分钟看懂在已有表基础上增加字段和说明,在这里插入图片描述,第4张

          设置说明

          默认增加字段时,是无法同时给字段添加备注信息的,需要额外操作。

          格式

          使用sql server内置的存储过程sp_addextendedproperty,然后通过传参数调用,内部会进行修改。

          只需要修改,@value、@level1type、@level2type,这三个地方

          exec sp_addextendedproperty 
              @name = N'MS_Description', 
              @value = N'字段名',
              @level0type = N'SCHEMA', @level0name = 'dbo', 
              @level1type = N'TABLE',  @level1name = '这里是表名',
              @level2type = N'COLUMN', @level2name = '这里是表字段';
          

          效果

          【Sql Server】新手一分钟看懂在已有表基础上增加字段和说明,在这里插入图片描述,第5张

          代码

          exec sp_addextendedproperty 
              @name = N'MS_Description', 
              @value = N'这里填字段说明',
              @level0type = N'SCHEMA', @level0name = 'dbo', 
              @level1type = N'TABLE',  @level1name = 'my_table_name',
              @level2type = N'COLUMN', @level2name = 'value_text';
          

          注意事项

          参数一定要传对,必须修改已存在的表以及字段,否则会报错

          【Sql Server】新手一分钟看懂在已有表基础上增加字段和说明,在这里插入图片描述,第6张

          存储过程

          sp_addextendedproperty,这个是内置的系统存储过程【Sql Server】新手一分钟看懂在已有表基础上增加字段和说明,在这里插入图片描述,第7张

          • 基本概念

            sp_addextendedproperty 存储过程的作用是向 SQL Server 数据库中的对象(如表、列、约束等)添加扩展属性。

            扩展属性是用于存储关于数据库对象的元数据或说明的键值对。

            使用 sp_addextendedproperty 存储过程可以在指定的对象上添加扩展属性,并为该属性提供名称和值。

            通过增加扩展属性,你可以为数据库对象提供说明、备注、版本或任何其他类型的元数据信息。

            这些扩展属性可以帮助你在开发、维护和管理数据库时更好地理解和记录对象的特性、用途和变化。

            它们可以在查询和文档生成过程中使用,也可以在数据库设计和数据字典维护中使用。

            另外,通过使用 sp_addextendedproperty 存储过程,你还可以在其他应用和工具中检索和利用这些扩展属性,从而提供了更多关于数据库对象的可访问信息。

            • 代码

              下面是存储过程的代码,感兴趣的可以分析研究下

              USE [TempDatabase]
              GO
              /****** Object:  StoredProcedure [sys].[sp_addextendedproperty]    Script Date: 2024/01/26 15:31:27 ******/
              SET ANSI_NULLS ON
              GO
              SET QUOTED_IDENTIFIER ON
              GO
              ALTER procedure [sys].[sp_addextendedproperty]
                  @name sysname,
                  @value sql_variant            = NULL,
                  @level0type    varchar(128)    = NULL,
                  @level0name    sysname            = NULL,
                  @level1type    varchar(128)    = NULL,
                  @level1name    sysname            = NULL,
                  @level2type    varchar(128)    = NULL,
                  @level2name    sysname            = NULL
              as
                  declare @ret int
                  if datalength(@value) > 7500
                  begin
                      raiserror(15097,-1,-1)
                      return 1
                  end
                  
                  if @name is null
                  begin
                      raiserror(15600,-1,-1,'sp_addextendedproperty')
                      return (1)
                  end
                  execute @ret = sys.sp_validname @name
                  if (@ret <> 0)
                  begin
                      raiserror(15600,-1,-1,'sp_addextendedproperty')
                      return (1)
                  end
                      
                  BEGIN TRANSACTION
                  
                  BEGIN TRY
                      EXEC %%ExtendedPropertySet().AddValue(Name = @name, Value = @value, Level0type = @level0type, Level0name = @level0name, Level1type = @level1type, Level1name = @level1name, Level2type = @level2type, Level2name = @level2name) 
                  END TRY
                  BEGIN CATCH
                      if (xact_state() <> 0) ROLLBACK TRANSACTION;
                      THROW
                  END CATCH
                  
                  COMMIT TRANSACTION
                  return (0)
              

              文章推荐

              同类型文章,推荐大家阅读博主在csdn平台上写的其他关于sql server的文章