zoukankan      html  css  js  c++  java
  • 修改数据表字段长度

    前两天遇到这么件事,数据库某字段最初设计为6位但现在有8位的编号要存储。于是就想到了修改表字段的长度可是用

    ALTER TABLE 表名 ALTER COLUMN 列名 varchar(16) not null

    无法直接修改,这是什么问题啊?原来是欲修改的列名是主或外键。那只能这样先删除外键再删除主键再修改,修改完再先加主键后再加外键就OK啦。

    --定义变量存储主外键
    DECLARE @Constraint_Name varchar(128)
    --查找某表外键
    SELECT @Constraint_Name= Name
    FROM dbo.sysobjects
    WHERE Xtype = 'F' --“F”代表外键
    and Parent_Obj =
    (
    SELECT [ID] FROM dbo.sysobjects WHERE id = OBJECT_ID(N'表名')
    and OBJECTPROPERTY(OBJECT_ID(N'表名'), N'IsUserTable') = 1 )
    PRINT @Constraint_Name
    --删除原外键
    EXEC ('ALTER TABLE 表名 DROP CONSTRAINT '+@Constraint_Name )


    要是一张表有多个外键怎么办?上面的代码只能查出一个,下面的代码可解决:

    --定义变量存储主外键
    DECLARE @Constraint_Name varchar(128)
    --查找RingResourceNoCheck表外键
    SELECT @Constraint_Name=NAME FROM (
    SELECT Name
    FROM dbo.sysobjects
    WHERE Xtype = 'F'
    and Parent_Obj =
    (
    SELECT [ID] FROM dbo.sysobjects WHERE id = OBJECT_ID(N'表名')
    and OBJECTPROPERTY(OBJECT_ID(N'表名'), N'IsUserTable') = 1 )
    ) AS Temptb WHERE NAME LIKE '%主表名' --好像外键的名字最后都跟的是主表的名称
    PRINT @Constraint_Name
    --删除原外键
    EXEC ('ALTER TABLE 表名 DROP CONSTRAINT '+@Constraint_Name )

    删除了外键接下来开始删除主键如下代码:

    --查找某表主键
    DECLARE @Constraint_Name varchar(128)
    SELECT @Constraint_Name=Name
    FROM dbo.sysobjects
    WHERE Xtype = 'PK'
    and Parent_Obj =
    (
    SELECT [ID] FROM dbo.sysobjects WHERE id = OBJECT_ID(N'表名')
    and OBJECTPROPERTY(OBJECT_ID(N'表名'), N'IsUserTable') = 1 )
    PRINT @Constraint_Name
    --删除原主键
    EXEC ('ALTER TABLE 表名 DROP CONSTRAINT '+@Constraint_Name )

    下面可以修改字段的长度了

    ALTER TABLE 表名 ALTER COLUMN 字段 varchar(长度) [not] null

    最后再添加上主键和外键就可以了:

    --添加主键
    ALTER TABLE 表名 ADD CONSTRAINT PK_名称(一般为表名) PRIMARY KEY CLUSTERED (欲加主键的字段)
    GO
    --添加外键
    ALTER TABLE 表名 ADD CONSTRAINT Fk_本表名_主表名 FOREIGN KEY (字段) REFERENCES 主表名(字段)

    以前是本人遇到此类问题时的解决方法,若有不同欢迎指出共同学习。谢谢!




     

  • 相关阅读:
    ==和equals的区别
    layui渲染Select列表
    layui中使用自定义数据格式对数据表格进行渲染
    java中使用javaMail工具类发送邮件
    上手spring boot项目(三)之spring boot整合mybatis进行增删改查
    上手spring boot项目(四)之springboot如何返回json数据
    遍历json数据的几种方式
    springboot整合thymleaf模板引擎
    上手spring boot项目(二)之spring boot整合shiro安全框架
    上手spring boot项目(一)之如何在controller类中返回到页面
  • 原文地址:https://www.cnblogs.com/zgshi/p/2247216.html
Copyright © 2011-2022 走看看