KingbaseES V9 SQL Server兼容性体验

本文针对电科金仓推出的 KingbaseES V9(SQL Server 兼容版)数据库进行了系统性测试,重点验证其在 SQL Server 语法兼容、数据库功能及部署运维等方面的表现。测试结果显示,该版本对 SQL Server 常用语法及特性展现了良好的兼容性,产品成熟度较高,为国产化数据库替代提供了可行方案。

一、产品概述

金仓数据库管理系统(KingbaseES)作为电科金仓的核心产品,具备大型通用数据库的 “三高”(高可靠、高性能、高安全)与 “三易”(易管理、易使用、易扩展)特性,已入选国家自主创新产品目录,在国家级、省部级项目中得到广泛应用。

为响应国产化替代需求,KingbaseES V9 推出针对 Oracle、MySQL、SQL Server 三大主流数据库的兼容模式,其中 SQL Server 语法兼容性达 95%,体现了国产数据库在核心技术适配领域的持续突破。

二、环境部署与配置
首先官网下载对应版本
image.png
打开安装程序
PixPin_20250713_122130.png

PixPin_20250713_122151.png

同意授权
PixPin_20250713_122204.png
选择安装类型

PixPin_20250713_122214.png
选择license
PixPin_20250713_122223.png

选择安装位置
PixPin_20250713_122246.png

安装前检查

PixPin_20250713_122305.png

选择数据位置

PixPin_20250713_123654.png

设置数据库信息

PixPin_20250713_123712.png

随后安装完成
三、兼容性测试
3.1 系统数据库兼容性
KingbaseES(SQL Server 兼容版)实现了与 SQL Server 一致的系统数据库架构:

master 数据库:存储系统级元数据(登录账户、系统配置等),是创建数据库的唯一入口
resource 数据库:只读存储所有系统对象,逻辑上呈现于各数据库的 sys 架构中,支持通过升级包进行更新
3.2 核心语法与函数兼容性验证
测试覆盖 SQL Server 常用函数及语法结构,结果如下:

日期时间函数:GETDATE()、DATEADD()、DATEDIFF()、DATEPART()等函数均能正确返回预期结果
字符串函数:CHARINDEX()、SUBSTRING()、LEN()等字符串处理函数表现正常
数据类型转换:CAST()函数实现不同数据类型间的正确转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
-- 1. 创建测试数据库(需在master库执行)
USE master;
GO

CREATE DATABASE TestDB1;
CREATE DATABASE TestDB2;
GO

-- 2. 在TestDB1中创建基础测试表及数据
USE TestDB1;
GO

-- 员工表(含IDENTITY自增列)
CREATE TABLE Employees (
EmployeeID INT IDENTITY(1,1) PRIMARY KEY,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
HireDate DATETIME NOT NULL DEFAULT GETDATE(),
Salary DECIMAL(18,2) NOT NULL,
Department NVARCHAR(30)
);
GO

-- 插入测试数据
INSERT INTO Employees (FirstName, LastName, HireDate, Salary, Department)
VALUES
('John', 'Doe', '2020-01-15', 50000.00, 'IT'),
('Jane', 'Smith', '2019-03-22', 62000.00, 'HR'),
('Alice', 'Johnson', '2021-07-01', 55000.00, 'IT'),
('Bob', 'Brown', '2018-11-30', 70000.00, 'Finance'),
('Charlie', 'Davis', '2022-05-10', 48000.00, 'IT'),
('Diana', 'Wilson', '2020-09-05', 65000.00, 'Finance');
GO

-- 3. 在TestDB2中创建关联测试表
USE TestDB2;
GO

-- 部门表
CREATE TABLE Departments (
DeptID INT PRIMARY KEY,
DeptName NVARCHAR(30) NOT NULL,
Location NVARCHAR(50)
);
GO

-- 插入部门数据
INSERT INTO Departments (DeptID, DeptName, Location)
VALUES
(1, 'IT', 'Building A'),
(2, 'HR', 'Building B'),
(3, 'Finance', 'Building C');
GO


image.png

1
2
3
4
5
6
7
8
9
-- 日期时间函数测试
SELECT
GETDATE() AS CurrentTime, -- 当前时间
DATEADD(month, 3, '2025-01-15') AS Add3Months, -- 日期加3个月
DATEDIFF(day, '2023-01-01', GETDATE()) AS DaysFrom2023, -- 日期差(天)
DATEPART(year, HireDate) AS HireYear -- 提取年份
FROM Employees;
GO

image.png

1
2
3
4
5
6
7
-- 字符串函数测试
SELECT
CHARINDEX('son', LastName) AS FindSubstring, -- 子串位置
SUBSTRING(FirstName, 1, 3) AS First3Chars, -- 字符串截取
LEN(Department) AS DeptNameLength -- 字符串长度
FROM Employees;
GO

image.png

3.3 数据库对象与跨库查询支持
跨库查询:支持[数据库名].[模式名].[表名]的跨库访问语法,在多数据库环境中可正确查询目标表数据
批处理命令:实现 SQL Server 特有的GO批处理标识,支持GO N语法重复执行 SQL 语句
流程控制:验证嵌套BEGIN…END块及WHILE循环、变量声明等流程控制语句,可正确执行并返回预期结果

1
2
3
4
5
6
7
8
9
10
11
12
13
-- 在TestDB2中查询TestDB1的Employees表(跨库访问)
USE TestDB2;
GO

SELECT
e.EmployeeID,
e.FirstName,
e.LastName,
d.DeptName,
d.Location
FROM [TestDB1].[dbo].[Employees] e
JOIN Departments d ON e.Department = d.DeptName;
GO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
USE TestDB1;
GO

-- 测试GO批处理(重复执行3次查询)
SELECT '当前时间:' + CAST(GETDATE() AS VARCHAR(30)) AS BatchTest;
GO 3

-- 测试嵌套循环与变量(打印1-5的数字)
BEGIN
DECLARE @i INT = 1;
BEGIN
WHILE @i <= 5
BEGIN
PRINT '循环计数:' + CAST(@i AS VARCHAR(2));
SET @i = @i + 1;
END
END
END;
GO

image.png

image.png
四、测试结论
KingbaseES V9(SQL Server 兼容版)对 SQL Server 核心语法、函数及数据库对象模型实现了高度兼容,基本满足日常业务场景需求

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...