我正在使用SQL Server 2014 CTP2,READ_COMMITTED_SNAPSHOT ON(我认为这对问题很重要).
我创建了一个In-Memory表类型(非常类似于technet博客,SQL Server 2014 In Memory OLTP:内存优化表类型和表变量),我有几个内存表.
在查询本身中,我在常规内存表和内存表类型之间有一个连接,充当过滤器,当我执行查询时,我收到此错误消息:"使用READ访问内存优化表的查询当数据库选项READ_COMMITTED_SNAPSHOT设置为ON时,COMMITTED隔离级别无法访问基于磁盘的表.使用表提示(例如WITH(SNAPSHOT))为内存优化表提供支持的隔离级别.
我正在写这个问题时删除了READ_COMMITTED_SNAPSHOT,但问题仍然存在,如果我创建了一个内存数据类型,并且这个特定类型将"永远不会溢出到磁盘",正如博客所说,为什么呢?服务器"看到"它作为"磁盘表?
为了清理,我尝试只使用In-Mem表进行连接并且它可以工作,只要表类型进来我就得到了错误.
更新:当我删除READ_COMMITTED_SNAPSHOT(现在已关闭)时,查询有效,但现在我已经丢失了多版本/无锁定/速度,我想听听另一个解决方案.
谢谢
CREATE DATABASE MemOptimized
GO
ALTER DATABASE MemOptimized
ADD FILEGROUP mofg
CONTAINS MEMORY_OPTIMIZED_DATA
GO
ALTER DATABASE MemOptimized
ADD FILE ( NAME = N'mofg',
FileName = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MemOptimized.ndf')
TO FILEGROUP mofg
Run Code Online (Sandbox Code Playgroud)
CREATE TYPE [dbo].[tType] AS TABLE(
[C] [int] NOT NULL
INDEX ix NONCLUSTERED HASH (C) WITH (BUCKET_COUNT = 8)
) WITH ( MEMORY_OPTIMIZED = ON )
CREATE TABLE …Run Code Online (Sandbox Code Playgroud) sql-server in-memory user-defined-types sql-server-2014 memory-optimized-tables