SQL server中:常见问题汇总

1.选项修改

修改表时提示:不允许修改表结构

  1. 步骤
    选择菜单栏中的“工具”-“选项”,在选项对话框左栏中找到“设计器”,在设计器右边取消勾选“阻止保存要求重新创建表的更改”即可。

  2. 图例
    在这里插入图片描述

  3. 注意
    设计表时,尽量一次性设计成功,避免使用alter修改表,修改起来有各种约束,不容易修改。

以下文件中的行尾不一致,要将行尾标准化吗?

解决:

选项-环境-文档-取消勾选检查一致的行尾

在这里插入图片描述

2.将截断字符串或二进制数据。

你设置的数据类型长度(9)比你输入的数据长度(11)短

解决方法:
需要重新设置数据类型长度

3.在将 varchar 值 ‘null’ 转换成数据类型 int 时失败。

int转换为char类型

4.插入insert 、更新update、删除drop数据失败,主外键FOREIGN KEY 冲突

问题:
1.INSERT 语句与 FOREIGN KEY 约束"FK__departmen__leade__29572725"冲突。该冲突发生于数据库"xmgl",表"dbo.staff", column ‘sno’。

解决方法:
先删除该约束,插入数据后,再加上约束

5.列不允许有NuIl值,插入INSERT失败

原因:
没有设置id为标识:是
int数据类型,并且双击为:是

注意:
数据类型为int时,才可设置表规范为:是

打开SQL dbms软件,右键表——设计——列属性:

如图:
在这里插入图片描述

6.修改表 ALTER TABLE 语句与外键 FOREIGN KEY 约束冲突

问题:

“FK__departmen__leade__19DFD96B"冲突。该冲突发生于数据库"xmgl”,表"dbo.staff", column ‘sno’。

原因:

因为该Student表中是有数据的,所以增加不了外键。

解决:

创建外键中,把“在创建或重新启动时检查现有数据”改为否!!!

注意:

如果数据表中都没有数据,可以默认为是。但是数据表中都有数据才创建外键,就要把这里改为否,才能创建成功。
在这里插入图片描述

在被引用表 ‘部门表’ 中没有与外键 ‘FK__项目表__项目主管__267ABA7A’ 中的引用列列表匹配的主键或候选键

解决:

给所在表设置主键

总:
一个一个表按照顺序插入
设置好数据类型

7.sql server中命令提示:对象名无效,但是可以执行成功

对象名无效

原因:
修改表结构后,使用SQL语句时,会出现列名无效,原因为SQL Server的intellisense(智能感知功能)

解决:
使用 Ctrl+Shift+R 快捷键即可

8.选择列表中的列 ‘STUDENT.sno’ 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

错误例子如下:

 select  sno,  count(sno) 总人数
from STUDENT

在这里插入图片描述

正确的应为:

select  sno,  count(sno) 总人数
from STUDENT
group by sno
-- 或者为
select    count(sno) 总人数
from STUDENT

在这里插入图片描述
在这里插入图片描述
但查询结果有所不同

9.视图问题

‘CREATE VIEW’ 必须是查询批次中的第一个语句

添加 go
例如;

go  --sql server中
create view MAN_VIEW 
AS 
SElect  sname ,ssex
from student
where ssex='男'; 

创建视图并查询时提示: 关键字 ‘SELECT’ 附近有语法错误

例如:
将各系学生人数,平均年龄定义为视图V_NUM_AVG,并查看

-- 错误举例:
go
create view V_NUM_AVG
as
select  sdept , count(*) , avg(sage) 平均年龄
from student
group by sdept

-- 查询视图V_NUM_AVG的内容

SELECT *  --提示: 关键字 'SELECT' 附近有语法错误
FROM V_NUM_AVG

----------------------正确写法--------------------------------
go
create view V_NUM_AVG
as
select  sdept , count(*) , avg(sage) 平均年龄
from student
group by sdept

-- 查询视图V_NUM_AVG的内容
go --------------加个go即可
SELECT *  --
FROM V_NUM_AVG

无法对 表 ‘STUDENT’ 创建多个聚集索引。请在创建新聚集索引前删除现有的聚集索引 ‘PK__student__DDDF6446B512A3A9’。

语法问题, 规定只能有一个聚集索引

10.语法问题

选择列表中的列 ‘sc.sno’ 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

    Select指定的每一列都应该出现在Group By子句中,除非对这一列使用了聚合函数;
	Group By中不能出现不在表中的列;

select 语句中,如何给列名起别名为数字不报错

在SQL中,列名或别名不能以数字开头,因此不能直接将列名起别名为数字。然而,可以将数字作为别名的一部分,只需在数字前面添加一个非数字字符,例如下划线或字母。

11.索引问题

修改索引名时提示,student为表名:

这里的student为修改索引名时的表名:
EXEC sp_rename ‘student.IX_sage’, ‘sage2’, ‘INDEX’;

解决:

加上 命令
use  表名
之后,无论怎么改,都不会出现该问题,删除user 表名后也一样,不知道怎么回事,可能是系统误报,多执行几次

SET SHOWPLAN 语句必须是批处理中仅有的语句,如何运行

问题:

批处理开头以go开始

解决:

加go
三个go 

如下代码:

 go
SET showplan_all on

go
SELECT * 
FROM student 

go
SET showplan_all  OFF

12 数据库编程(触发器/ 存储过程/游标等)问题

CREATE/ALTER PROCEDURE’ 必须是查询批次中的第一个语句

原因:

我再前面使用了use  educ 命令,
使 create  procedure  p1_存储过程 命令非第一句

在这里插入图片描述

解决:

1 删除 
use  educ  命令

2 在create 语句前面加:
go

在这里插入图片描述

存储过程: 操作数数据类型 char 对于 avg 运算符无效

原因:

表中数据类型为char, 而这里编程设定的数据类型为int ,不匹配

解决:

设置表数据类型为 int 

内外连接问题

列名 ‘项目编号’ 不明确

原因:

通常是因为在查询中使用了多个表,并且其中至少有一个表中存在重名的列

解决:

在列名前面加上表的别名,以明确指定是哪个表的列

警告: 聚合或其他 SET 操作消除了 Null 值

外键表与主键表

在数据库DBMS中
外键表一般都为当前表,键为要设置的外键
主键表非当前表,键为另一个表中要设置的主键

这样更容易理解一点
在这里插入图片描述

待续

 
 
—————————————————————
以上就是今日博客的全部内容了
创作不易,若对您有帮助,可否点赞、关注一二呢,感谢支持.

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐