若要避免这个问题,您可以考虑使用Extended Events来报告内存优化表的更改。以下是一些示例代码,它可以为内存优化表创建Extended Events session并捕获事件:
--创建Extended Event Session
CREATE EVENT SESSION [Capture_AlterTable] ON SERVER
ADD EVENT sqlserver.object_altered
--过滤以包括内存优化表
WHERE (sqlserver.database_id = 7 AND
sqlserver.class_type = 2 AND
sqlserver.object_type = 'MEMORY_OPTIMIZED_TABLE')
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY = 4096 KB, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 10 SECONDS, MAX_EVENT_SIZE = 0 KB, MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = ON, STARTUP_STATE = OFF)
--启动Extended Event Session
ALTER EVENT SESSION [Capture_AlterTable] ON SERVER STATE = START
使用Extended Events来捕获内存优化表的更改,这比使用事件通知更好。