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

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. 图例

                    SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等),在这里插入图片描述,第1张

                  3. 注意

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

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

                  解决:

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

                  SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等),在这里插入图片描述,第2张

                  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软件,右键表——设计——列属性:

                  如图:

                  SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等),在这里插入图片描述,第3张

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

                  问题:

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

                  原因:

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

                  解决:

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

                  注意:

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

                  SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等),在这里插入图片描述,第4张

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

                  解决:

                  给所在表设置主键
                  

                  总:

                  一个一个表按照顺序插入

                  设置好数据类型

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

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

                  原因:

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

                  解决:

                  使用 Ctrl+Shift+R 快捷键即可

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

                  错误例子如下:

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

                  SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等),在这里插入图片描述,第6张

                  正确的应为:

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

                  SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等),在这里插入图片描述,第7张

                  SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等),在这里插入图片描述,第8张

                  但查询结果有所不同

                  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_存储过程 命令非第一句
                  

                  SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等),在这里插入图片描述,第9张

                  解决:

                  1 删除 
                  use  educ  命令
                  2 在create 语句前面加:
                  go
                  

                  SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等),在这里插入图片描述,第10张

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

                  原因:

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

                  解决:

                  设置表数据类型为 int 
                  

                  内外连接问题

                  列名 ‘项目编号’ 不明确

                  原因:

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

                  解决:

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

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

                  外键表与主键表

                  在数据库DBMS中

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

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

                  这样更容易理解一点

                  SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等),在这里插入图片描述,第11张

                  待续

                   

                   

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

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

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