Export (0) Print
Expand All

Accessing Memory-Optimized Tables Using Interpreted Transact-SQL

SQL Server 2014

With only a few exceptions, you can access memory-optimized tables using any Transact-SQL query or DML operation (SELECT, INSERT, UPDATE, or DELETE), ad hoc batches, and SQL modules such as stored procedures, table-value functions, triggers, and views.

Interpreted Transact-SQL refers to Transact-SQL batches or stored procedures other than a natively compiled stored procedure. Interpreted Transact-SQL access to memory-optimized tables is referred to as interop access.

Memory-optimized tables can also be accessed using a natively compiled stored procedure. Natively compiled stored procedures are recommended for performance-critical OLTP operations.

Interpreted Transact-SQL access is recommended for these scenarios:

  • Ad hoc queries and administrative tasks.

  • Reporting queries, which typically use constructs not available in natively compiled stored procedures (such as window functions).

  • To migrate performance-critical parts of your application to memory-optimized tables, with minimal (or no) application code changes. You can potentially see performance improvements from migrating tables. If you then migrate stored procedures to natively compiled stored procedures, you may see further performance improvement.

  • When a Transact-SQL statement is not available for natively compiled stored procedures.

The following Transact-SQL constructs are not supported in interpreted Transact-SQL stored procedures that access data in a memory-optimized table.

Area

Unsupported

Access to tables

TRUNCATE TABLE

MERGE (memory-optimized table as target)

Dynamic and keyset cursors (these automatically degrade to static).

Access from CLR modules, using the context connection.

Referencing a memory-optimized table from an indexed view.

Cross-database

Cross-database queries

Cross-database transactions

Linked servers

For more information about table hints, see. Table Hints (Transact-SQL). SNAPSHOT isolation was added to support In-Memory OLTP.

The following table hints are not supported when accessing a memory-optimized table using interpreted Transact-SQL.

HOLDLOCK

IGNORE_CONSTRAINTS

IGNORE_TRIGGERS

NOWAIT

PAGLOCK

READCOMMITTED

READCOMMITTEDLOCK

READPAST

READUNCOMMITTED

ROWLOCK

SPATIAL_WINDOW_MAX_CELLS = integer

TABLOCK

TABLOCKXX

UPDLOCK

XLOCK

When accessing a memory-optimized table from an explicit or implicit transaction using interpreted Transact-SQL you must include either an isolation level table hint such as SNAPSHOT, REPEATABLEREAD, or SERIALIZABLE, or you can use MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT. For more information, see Guidelines for Transaction Isolation Levels with Memory-Optimized Tables and ALTER DATABASE SET Options (Transact-SQL).

Note Note

An isolation level table hint is not required for memory-optimized tables accessed by queries running in auto-commit mode.

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft