更新查询因未知原因失败

问题描述 投票:0回答:1

我有一个过程,可将本地 SQL Server 2005 数据库中的数据推送到设置为链接服务器的 Azure DB 中的表中。基本数据流是创建#staging 表、用新数据填充#staging 表、更新Azure 表中的现有行、在Azure 表中插入新行。返回的错误是“游标计划失败,因为无法使用 USE PLAN 提示强制执行 FAST_FORWARD 或 STATIC 类型以外的游标计划。请考虑删除 USE PLAN 提示并更新统计信息或使用不同的提示来影响查询计划选择。”但是我在程序中没有使用光标。我已将代码部分缩小到下面的更新部分。

    UPDATE T1
    SET T1.Col5 = T2.Col5
    FROM
    Azure.database.dbo.tablename T1 INNER JOIN #staging T2
    ON  T1.[col1] = T2.[col1] COLLATE Latin1_General_CI_AS
    AND T1.[col2] = T2.[col2] COLLATE Latin1_General_CI_AS 
    AND T1.[col3] = T2.[col3] COLLATE Latin1_General_CI_AS
    AND T1.[col4] = T2.[col4]
    WHERE T1.[col5] <> T2.[col5]

我正在使用相同的工作流程来维护其他一些表,没有出现问题,所以我不确定问题可能是什么。我尝试重建目标表上的统计信息并重新编译该过程,但没有成功。任何帮助将不胜感激。

我尝试删除 Azure 端的表并重新创建它,希望缓存的所有内容都能被清除。运行该过程并成功,但只需要插入,因为新表是空的。第二次运行,在更新部分失败并出现相同的错误。

重新编写了该过程,并将“更新”部分替换为“从 Azure 中删除”,其中在 #staging 中找到关键字段,然后从 #staging 中插入。可以工作,但肯定不理想。

sql azure-sql-database
1个回答
0
投票

当您引用表/对象时,Azure SQL 数据库不支持三部分或四部分名称。

如果它对您有用,Azure SQL 数据库也不支持跨数据库查询。您需要为此配置弹性查询。

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