内存优化表不支持 DDL 语句 CREATE、ALTER 和 DROP 上的数据库和服务器触发器

问题描述 投票:0回答:3
当我尝试删除内存优化表时,出现此错误。 我正在使用 sql server 2016 sp1

内存优化表不支持 DDL 语句 CREATE、ALTER 和 DROP 上的数据库和服务器触发器。

我已经放弃了 sec 策略和第二个索引。 我不能删除 spidfilter,因为你必须有 1 个 MOT 索引。 只是想看看这是否有所作为。但事实并非如此。

代码如下:

create table dbo.MOT_tmpTableName ( Col1 int, Col2 int, Col3 smalldatetime, Col4 smalldatetime, Col5 varchar(25), Col6 date, Col7 smallint, Col8 smallint, Col9 smallint, Col10 smallint, SpidFilter smallint not null DEFAULT (@@spid), index nIX_SpidFilter nonclustered (SpidFilter), index nIX_Col1_Col2_Col3 nonclustered (Col1, Col2, Col3), CONSTRAINT CHK_MOT_tmpTableName_SpidFilter CHECK ( SpidFilter = @@spid ), ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY); go create security policy dbo.MOT_tmpTableName_SpidFilter_Policy ADD FILTER PREDICATE dbo.fn_SpidFilter(SpidFilter) ON dbo.MOT_tmpTableName WITH (STATE = ON); go

我问过周围,其他环境没有这个问题。 我无法摆脱“数据库和服务器触发器......”的困扰。 触发什么触发器会导致错误?

sql sql-server-2016
3个回答
1
投票
不可以,启用了内存中 OLTP 的数据库不支持 DDL 触发器。

内存中 OLTP 表和本机编译模块不支持数据库级和服务器级 DDL 触发器。

您无法在启用了内存中 OLTP 的数据库中创建 DDL 触发器,因为运行触发器所需的代码路径会干扰内存中功能。解决方法是将所有内存中 OLTP 表放入一个没有 DDL 触发器的数据库中,将其余表放入一个没有内存优化表的单独数据库中,并在那里启用 DDL 触发器。


0
投票

如果您使用 SQL Server Managment studio,可以在数据库触发器的“数据库”->“数据库名称”->“可编程性”->“数据库触发器”文件夹和“服务器对象”->“触发器”文件夹下找到这些文件在对象资源管理器中。

纯 t-SQL 搜索:

SELECT * FROM database_name.sys.triggers AS T WHERE T.parent_class = 0; SELECT * FROM sys.server_triggers AS ST;



0
投票

希望它有效!

© www.soinside.com 2019 - 2024. All rights reserved.