ALTER INDEX语句被忽略吗?

Kittoes0124

当我运行下面的伪代码时:

BEGIN TRANSACTION @TName
BEGIN TRY
    -- Disable columnstore index
    ALTER INDEX CSIX_MyTable ON dbo.MyTable DISABLE;

    MERGE INTO dbo.MyTable

...

我收到此错误:

MERGE语句失败,因为无法在具有列存储索引的表中更新数据。考虑在发出MERGE语句之前禁用列存储索引,然后在MERGE完成后重建列存储索引。

我不了解的是,在执行之前,我显然禁用了索引MERGE我已经进行了两次,三次和四次检查,确认我禁用了正确的索引。实际上,如果我自己执行该ALTER INDEX语句,然后再次运行上面的代码块,则MERGE完成就可以了。关于为什么发生这种情况或如何解决的任何想法?

编辑:

我也有下面的伪代码,可以毫无问题地执行:

BEGIN TRANSACTION @TName
BEGIN TRY
    -- Disable columnstore index
    ALTER INDEX CSIX_MyTable2 ON dbo.MyTable2 DISABLE;

    INSERT INTO #MyTempTable(Columns...)
    SELECT Columns...
    FROM (
        MERGE INTO dbo.MyTable
        ...
        OUTPUT ...
    ) A

...

索引被禁用,MERGE进程顺利进行。似乎由于某种原因,包装INSERT语句似乎“欺骗”了编译器以执行代码。

我确定将ALTER INDEX语句移至另一个任务可以解决该问题,但是我对这个问题的希望是尝试找出为什么代码无法按原样运行。

菲利普·凯利

一个猜测:代码在编译时被拒绝。SQL获取您的脚本,对其进行解析,查看合并,确定是否存在列存储索引,并引发并返回错误...而不够聪明,无法“注意到”在上一步中已禁用该索引。

我不知道这是问题所在,但是我以前见过类似的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Oracle临时表空间alter语句

MySQL注释掉Alter表分区语句

ALTER TABLE语句与FOREIGN KEY约束冲突

Alter表中的Case语句错误

为什么 TRUNCATE 语句需要 ALTER 权限?

ORA-06550 带有alter 语句

使用ALTER编辑存储过程吗?

使用ALTER INDEX改变索引名称

为什么这个 sql 语句不起作用 ----"ALTER TABLE ALTER COLUMN email varchar(100) not null;"----?

修改现有索引:使用drop_existing = on与alter index语句创建索引

创建表脚本使用alter语句添加列

执行立即语句时无效的ALTER TABLE选项

sqlite alter table在单个语句中添加MULTIPLE列

创建不带alter语句的h2备份

EF迁移:ALTER TABLE语句与FOREIGN KEY约束冲突

在MYSQL的ALTER TABLE语句中使用变量或函数

为什么TRUNCATE语句需要ALTER特权而不是DELETE?

在postgres中使用选择内部alter table语句的结果

PostgreSQL:如何运行从SQL SELECT语句返回的ALTER查询

Oracle NLS_SORT无法通过ALTER SESSION工作吗?

我可以撤消-MySQL中的ALTER表吗?

Mysql Alter 表可以转换为默认值吗?

ALTER TABLE ADD INDEX 是否会永久更改 mysql 表?

使用QUOTED_IDENTIFIER解决“ ALTER INDEX失败”错误

“ ALTER DATABASE语句必须是批处理中的唯一语句”

可以在CREATE TABLE / ALTER TABLE语句中指定MySQL语句中的哪些列属性?

如何在ALTER LOGIN SQL语句中还原MUST_CHANGE?

如何使用MyBatis创建alter table语句?MySQLSyntaxErrorException:您的SQL语法有错误

如果飞行通道迁移失败,那么alter语句是否会回滚?