数据库升级失败!SQL文件不全或SQL语句有误!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库升级失败!SQL文件不全或SQL语句有误!相关的知识,希望对你有一定的参考价值。

金蝶K3rise12.2迁移旗舰版4.0时提示以下内容,求高手指点
数据库升级失败!SQL文件不全或SQL语句有误!
错误描述:不能将值 NULL 插入列 'FUserID',表 'AIS20150309145926.dbo.t_Base_User';列不允许有 Null 值。INSERT 失败。
Sql文件名:D:\PROGRAM FILES (X86)\KINGDEE\KISERP\KISEXPRESS\KDSYSTEM\KDCOM\SqlSrv\SP_KEEV13.0SocialData.sql
Sql内容:
--[NO SQL FILE INFOMATION]
--增加用户组,及用户的相关权限
DECLARE @FUserID INT
EXEC p_AddUserGroup 'Purchase' ,'Purchase',1,@FUserID OUTPUT
IF @FUserID >0
BEGIN
--角色默认功能
DELETE FROM t_NormalFunc WHERE FUserID=@FUserID

INSERT INTO t_NormalFunc(FUserID,FDetailFuncID,FFuncGroupID,FFuncName,FHelpCode,FShowName,FIndex,FType,FIsSystem) SELECT @FUserID,FDetailFuncID,0 AS FFuncGroupID,FFuncName,FHelpCode,FFuncName,100 AS FIndex,1 AS FType,1 AS FIsSystem FROM t_DataFlowDetailFunc WHERE FDetailFuncID =200104
INSERT INTO t_Nor

参考技术A

通过错误信息得知数据库(AIS20150309145926)里面的表(t_Base_User)的FUserID这个字段不能为NULL,但你升级时却往里面插入了NULL值,所以报错。

给你2个解决办法:

    找到插入NULL值的语句,并修改插入的值不为NULL。

    将FUserID这个字段修改为可以插入NULL值。(如果此字段为自增列或主键不能修改)

    ALTER TABLE t_Base_User ALTER COLUMN FUserID 数据类型  NULL

Navicat运行sql文件导入数据不全或导入失败

前言:

我们平时想把数据从一个数据库中导入另外一个数据库中的时候 

一般都是把所需的数据表进行转储sql文件 然后再运行sql文件 导入新的数据库中

这么做 数据少的时候一般不会出现什么错 

但是如果数据量比较大 表比较多 就会出现缺少数据表 或者缺少数据

解决问题办法:

查询网上资料得知 有以下几种办法可以去尝试解决 

第一:

先从数据库的配置文件下手

找到服务器上的MYSQL安装目录下的my.ini文件 然后去修改 记得重启

查找max_allowed_packet属性

max_allowed_packet=50M

或者再改大一点都行

第二:

从navicat修改数据库存储大小 和第一个有点相似  我2个都改了

命令:

//查看当前max_allowed_packet的大小

show global variables like 'max_allowed_packet';

//修改max_allowed_packet的大小

 set global max_allowed_packet=1024*1024*50;

改过后查询以下大小有没有改变 改变了就成功了

第三:

导入的数据库和导出得数据库编码和结构不同

修改数据库的表字符集同步

第四: 

更改严格模式,执行下列sql后再导入sql文件;

SET sql_mode = '';

SET GLOBAL sql_mode = '';

注意:

当用"SET sql_mode=''"时,mysql清除的默认的模式信息,

但是这也有一个问题,那就mysql不会作入侵检测,错误提示,

这就要求程序员在进行sql操作的时候更加小心。可以将上面sql加入到sql文件中先执行
 

第五: 

在我们导入数据的时候 把 "在每个运行中运行多个查询" 给对掉  这么会慢一些 但是数据不会冲突 不会让数据进行减少

第六: 

这个方法有点玄学 可信度有待调查 可以尝试尝试大家

在数据库中选择运行sql文件 没有在表中选择 运行sql文件 会准确度高一些

 

第七: 

使用命令行导入导出

一、window环境

A. 导出.sql

1. 导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u dbuser -p dbname > dbname.sql

2. 导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -u dbuser -p dbname users> dbname_users.sql

3. 导出一个数据库结构
mysqldump -u dbuser -p -d --add-drop-table dbname >d:/dbname_db.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table

B. 导入.sql

常用source 命令
进入mysql数据库控制台,如
mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:/dbname.sql

  1. 导入数据到数据库
    mysql -uroot -D数据库名

  2. 导入数据到数据库中得某个表
    mysql -uroot -D数据库名 表名

二、linux环境

A. 导出.sql

导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):
1、导出数据和表结构:
mysqldump -u 用户名 -p 参数(可选) 数据库名 >/home/sql/ 数据库名.sql

mysqldump -u root -p --default-character-set=utf8 db_name>/home/sql/fileName.sql

敲回车后会提示输入密码

2、只导出表结构
mysqldump -u用户名 -p密码 -d 数据库名 > 数据库名.sql

/usr/local/mysql/bin/ mysqldump -uroot -p -d abc > abc.sql

注:/usr/local/mysql/bin/ —> mysql的data目录

B. 导入.sql

1、首先建空数据库

mysql>create database abc;

2、导入数据库
方法一:
(1)选择数据库

mysql>use abc;


(2)设置数据库编码

mysql>set names utf8;


(3)导入数据(注意sql文件的路径)

mysql>source /home/abc/abc.sql;


方法二:
mysql -u用户名 -p 参数(可选) 数据库名 < 数据库名.sql

mysql -uabc_f -p--default-character-set=utf8 abc < abc.sql

第八: 

没有用过 看到最新的navicat12带的功能

数据传输和数据同步 结构同步 打开界面看了一下 更加简单暴力

 


 

如果上面的都没有解决你的问题

可以尝试一种简单暴力的方法 如果要导入的数据不多

可以把sql文件直接打开然后到navicat里面直接 查询->新建查询  然后输入sql

看看到底哪个地方报错了 然后再对应去修改


         当你的才华还撑不起你的野心时,就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来历练。梦想不是浮躁,而是沉淀和积累。

以上是关于数据库升级失败!SQL文件不全或SQL语句有误!的主要内容,如果未能解决你的问题,请参考以下文章

Navicat运行sql文件导入数据不全或导入失败

怎样把CSV格式的文件导入到SQL 2005?

python运行sql文件且失败可以回滚

python运行sql文件且失败可以回滚

显示不全或乱码,dos2unix和修改系统字符集的办法不管用怎么办

html2canvas截图不全或空白