我正在尝试使用 SQL In-Memory OLTP。限制在于该解决方案需要与 SQL Express 2019 和 2022 兼容。
此链接声称内存中 OLTP 与所有版本的 SQL 兼容,包括 Express。
使用 2022 版本时,我无法开始:
EXECUTE master.dbo.xp_create_subdir 'C:\data\'
GO
ALTER DATABASE S2X ADD FILEGROUP S2x_mod
CONTAINS MEMORY_OPTIMIZED_DATA;
GO
ALTER DATABASE S2x ADD FILE (
name='S2x_mod1', filename='c:\data\S2x_mod1')
TO FILEGROUP S2x_mod;
我到达上述查询的最后一部分并收到以下错误:
无法处理该操作。此 SQL Server 实例上已禁用 Always On 可用性组副本管理器。使用 SQL Server 配置管理器启用 Always On 可用性组。然后,重新启动 SQL Server 服务,并重试当前操作。有关如何启用和禁用 Always On 可用性组的信息,请参阅 SQL Server 联机丛书。
当尝试通过 SQL Server 配置管理器启用该选项时,它说使用此版本的 SQL Express无法打开“Always On 可用性组” 。
使用2019版本,我完成了上述查询并设法创建了内存优化表和本机存储过程:
-- Creating a memory-optimized table
CREATE TABLE dbo.State
(
CID NVARCHAR(50) NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000),
PNO INT NOT NULL,
IsStart BIT NOT NULL,
IsEnd BIT NOT NULL,
CMPID NVARCHAR(50) NOT NULL
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
GO
CREATE PROCEDURE dbo.GetStateByCID
@CID NVARCHAR(50)
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS
BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'English'
)
SELECT CID, PNO, IsStart, IsEnd, CMPID
FROM dbo.State
WHERE CID = @CID;
END;
但执行时:
EXEC @return_value = [dbo].[GetStateByCID]
@CID = N'1234'
我收到以下错误:
执行批处理时出错。错误消息为:内部连接致命错误。错误状态:15,令牌:0
我在网上没有找到很多关于此问题的帮助;但这似乎是 2017 版中修复的一个问题(请参阅此处)。这对我来说没有多大意义,因为我原本以为修复会默认包含在 2019 版中。无论如何,只有当内存中 OLTP 与 Express 2019和2022兼容时,我才可以使用它。
我在这里遗漏了什么?内存中 OLTP 是否与 SQL Express 兼容?我做错了什么吗?