SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等)

SQL server中:常见问题汇总

  • 1.选项修改
    • 修改表时提示:不允许修改表结构
    • 以下文件中的行尾不一致,要将行尾标准化吗?
  • 2.将截断字符串或二进制数据。
  • 3.在将 varchar 值 ‘null’ 转换成数据类型 int 时失败。
  • 4.插入insert 、更新update、删除drop数据失败,主外键FOREIGN KEY 冲突
  • 5.列不允许有NuIl值,插入INSERT失败
  • 6.修改表 ALTER TABLE 语句与外键 FOREIGN KEY 约束冲突
    • 问题:
    • 原因:
    • 解决:
    • 注意:
    • 在被引用表 ‘部门表’ 中没有与外键 ‘FK__项目表__项目主管__267ABA7A’ 中的引用列列表匹配的主键或候选键
  • 7.sql server中命令提示:对象名无效,但是可以执行成功
  • 8.选择列表中的列 ‘STUDENT.sno’ 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
  • 9.视图问题
    • ‘CREATE VIEW’ 必须是查询批次中的第一个语句
    • 创建视图并查询时提示: 关键字 ‘SELECT’ 附近有语法错误
    • 无法对 表 ‘STUDENT’ 创建多个聚集索引。请在创建新聚集索引前删除现有的聚集索引 ‘PK__student__DDDF6446B512A3A9’。
  • 10.语法问题
    • 选择列表中的列 ‘sc.sno’ 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
    • select 语句中,如何给列名起别名为数字不报错
  • 11.索引问题
    • 修改索引名时提示,student为表名:
    • SET SHOWPLAN 语句必须是批处理中仅有的语句,如何运行
  • 12 数据库编程(触发器/ 存储过程/游标等)问题
    • CREATE/ALTER PROCEDURE’ 必须是查询批次中的第一个语句
    • 存储过程: 操作数数据类型 char 对于 avg 运算符无效
  • 内外连接问题
    • 列名 ‘项目编号’ 不明确
  • 警告: 聚合或其他 SET 操作消除了 Null 值
  • 外键表与主键表
  • 待续

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中

外键表一般都为当前表,键为要设置的外键

主键表非当前表,键为另一个表中要设置的主键

这样更容易理解一点

在这里插入图片描述

待续

 

 

—————————————————————

以上就是今日博客的全部内容了

创作不易,若对您有帮助,可否点赞、关注一二呢,感谢支持.

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/01bb731696.html