SQL语句修改数据库遇到的问题

前言

  在使用SQL语句修改数据库的时候,遇到了一些问题,总结出来供大家参考。

自定义自增列的值

  针对有的表,我们会加一个标识列,作为标识增量自增,我们不用给该列进行赋值,但有的时候我们就希望该标识列是自己定义的值,那应该怎么办呢?

-- 允许 自增列可以自定义值
set IDENTITY_INSERT 表名 on

例如:set IDENTITY_INSERT Categories on
-- 插入对应记录
insert into Categories (CategoryID,CategoryName,Description,Picture) values('7','software','Delphi,Office','<Binary>')

  这里需要注意一下,此时虽然插入了表中的所有字段,但是前面的字段名不可以省略,否则依旧插不进去。

-- 关闭 自增列自定义值
set IDENTITY_INSERT 表名 off

删除外键依赖

  有的字段即是主键也是外键,此时进行删除的时候会提示无法删除,所以我们要先把外键依赖删除,在进行表格内容的删除。

-- 查是否存在外键依赖
SELECT * 
FROM sys.foreign_keys 
WHERE referenced_object_id=object_id('Categories')
ORDER BY 1

-- 删除外键依赖
ALTER TABLE Products
DROP CONSTRAINT FK_Products_Categories

修改字段类型

  1.自增列的数据类型

  自增列的数据类型必须是int,bigint,smallint或decimal,或者是小数位位数为0的numeric的数据类型,并且约束不能为null。

  一般来说,修改列的类型的SQL语句:

alter table 表名 alter column 列名 数据类型 not null

例如:alter table Categories alter column CategoryID char(20) not null

  所以,如果需要将自增列修改为char类型之类的,可以先把自增的标识去掉。

  2.主键的数据类型

  修改主键的数据类型时,会出现“由于一个或多个对象访问此列,…失败。”,此时应该先删除主键,在进行修改。

--删除主键
alter table Categories drop constraint PK_Categories

--修改类型
alter table Categories alter column CategoryID char(20) not null

--加上主键
alter table Categories add constraint PK_Categories primary key(CategoryID)

总结

  数据库有好多需要学习的内容呢,遇到了总结一下,慢慢学习。

发布了194 篇原创文章 · 获赞 118 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/m0_37508531/article/details/91351784