SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等)
插入insert 、更新update、删除drop数据失败,主外键FOREIGN KEY 冲突。INSERT 语句与 FOREIGN KEY 约束"FK__departmen__leade__29572725"冲突。该冲突发生于数据库"xmgl",表"dbo.staff", column 'sno'。解决方法:先删除该约束,插入数据后,再加上约束或修改表创建约束冲突:如果数据表中都没有数据,可以默
SQL server中:常见问题汇总
- 1.选项修改
- 2.将截断字符串或二进制数据。
- 3.在将 varchar 值 'null' 转换成数据类型 int 时失败。
- 4.插入insert 、更新update、删除drop数据失败,主外键FOREIGN KEY 冲突
- 5.列不允许有NuIl值,插入INSERT失败
- 6.修改表 ALTER TABLE 语句与外键 FOREIGN KEY 约束冲突
- 7.sql server中命令提示:对象名无效,但是可以执行成功
- 8.选择列表中的列 'STUDENT.sno' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
- 9.视图问题
- 10.语法问题
- 11.索引问题
- 12 数据库编程(触发器/ 存储过程/游标等)问题
- 内外连接问题
- 警告: 聚合或其他 SET 操作消除了 Null 值
- 外键表与主键表
- 待续
1.选项修改
修改表时提示:不允许修改表结构
-
步骤
选择菜单栏中的“工具”-“选项”,在选项对话框左栏中找到“设计器”,在设计器右边取消勾选“阻止保存要求重新创建表的更改”即可。 -
图例
-
注意
设计表时,尽量一次性设计成功,避免使用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中
外键表一般都为当前表,键为要设置的外键
主键表非当前表,键为另一个表中要设置的主键
这样更容易理解一点
待续
—————————————————————
以上就是今日博客的全部内容了
创作不易,若对您有帮助,可否点赞、关注一二呢,感谢支持.
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)