• 修改数据表字段长度


    前两天遇到这么件事,数据库某字段最初设计为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 主表名(字段)

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




     

  • 相关阅读:
    Confluence 6 连接到一个 LDAP 目录
    Confluence 6 LDAP 成员结构设置
    Confluence 6 LDAP 用户组结构设置
    Confluence 6 LDAP 用户结构设置
    Confluence 6 LDAP 高级设置
    Confluence 6 自动添加用户到用户组
    Confluence 6 权限设置
    一个小白的测试环境docker化之路
    客户端SDK测试思路
    限时购校验小工具&dubbo异步调用实现限
  • 原文地址:https://www.cnblogs.com/zgshi/p/2247216.html
Copyright © 2020-2023  润新知