首页 > 解决方案 > 内存中的表和使用 SQL Server 存储的过程中的正常表

问题描述

我正在尝试将存储过程重写为本机编译的存储过程。程序参考4张表;这些表是普通表(非内存优化),我正在使用 2 个与之相关的视图。

是否可以在不将任何这些对象转换为内存优化表的情况下创建本机编译的存储过程?

标签: sqlsql-serverin-memory-database

解决方案


不,本机编译的存储过程不能引用基于磁盘的表,只能引用内存优化的表。这是 Kalen Delaney 的书SQL Server Internals: In-Memory OLTP的引述:

但是,与可用于解释代码的丰富功能集相比,在本机编译的存储过程中允许使用的 T-SQL 语言结构存在一些限制。此外,本机编译的存储过程只能访问内存优化表,不能引用基于磁盘的表。

我在官方 Microsoft Docs 中找不到明确的声明,除了这个限制,这是事实的直接后果,即本机编译的存储过程不能引用“正常”表:

对于内存优化表,FOREIGN KEY 约束仅支持引用其他内存优化表的主键的外键。


推荐阅读