SQL71501:过程包含对对象的未解析引用

Posted

技术标签:

【中文标题】SQL71501:过程包含对对象的未解析引用【英文标题】:SQL71501: Procedure contains an unresolved reference to an object 【发布时间】:2017-11-20 16:04:32 【问题描述】:

我们有一个名为 PrematureLoanSettlement 的表:

CREATE TABLE [dim].[PrematureLoanSettlementRequest]
(
     [PrematureLoanSettlementRequestID]             INT             NOT NULL    IDENTITY(1,1) PRIMARY KEY
    ,[PrematureLoanSettlementRequestID_Primary]     BIGINT          NOT NULL
    ,[ContractID]                                   INT             NOT NULL    
    ,[RequestDateID]                                INT             NOT NULL

    ,[Created]                                      DATETIME        NOT NULL    DEFAULT GETDATE()
    ,[Modified]                                     DATETIME        NOT NULL    DEFAULT GETDATE()
)
GO

在 ETL 过程中,我想更新一个列 ContractID:


--  Update ContractID
-------------------------------------------------------------------------

IF @DateID BETWEEN @MinDateID AND @MaxDateID
    BEGIN

        UPDATE stg.PrematureLoanSettlementRequest
        SET a.CountryId = b.ContractID
        SELECT ContractID, @SourceID, @CountryId

        FROM stg.PrematureLoanSettlementRequest a

                INNER JOIN dim.Contract b
                    ON a.ContractID = b.ContractID

        WHERE b.SourceID = @SourceID
            AND b.CountryId = @CountryId

        -- For existing
        UPDATE a
        SET a.ContractID = b.ContractID 
        FROM
            [stg].[PrematureLoanSettlementRequest] a

            JOIN [dim].[PrematureLoanSettlementRequest] b 
                ON a.[PrematureLoanSettlementRequestID_Primary] = b.[PrematureLoanSettlementRequestID_Primary]

        WHERE a.SourceID = @SourceID
            AND a.ContractID IS NULL        

        -- Others
        UPDATE [stg].[PrematureLoanSettlementRequest]
        SET ContractID = 19000101
        WHERE ContractID IS NULL

    END

返回错误:

JOIN [dim].[PrematureLoanSettlementRequest] b 
                    ON a.[PrematureLoanSettlementRequestID_Primary] = **b.[PrematureLoanSettlementRequestID_Primary]**

SQL71501:过程:[s01].[stgPrematureLoanSettlementRequest] 包含对对象的未解析引用。无论是对象 不存在或引用不明确,因为它可以引用任何 以下对象: [dim].[PrematureLoanSettlementRequest].[b]::[PrematureLoanSettlementRequestID_Primary], [dim].[PrematureLoanSettlementRequest].[PrematureLoanSettlementRequestID_Primary] 或者 [stg].[PrematureLoanSettlementRequest].[b]::[PrematureLoanSettlementRequestID_Primary]。 Staging.Database C:\Workspace\Projects\Staging.Database\SchemaObjects\Procedures\s01\stgPrematureLoanSettlementRequest.sql

我们将不胜感激。

【问题讨论】:

如果你解释你想要做什么,可能有一种更简单的方式来表达查询。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/… 我想你会想改变上面的setSET a.CountryId = b.ContractID来匹配下面的,比如SET a.ContractID = b.ContractID 【参考方案1】:

你应该问另一个问题,提供样本数据和你想做什么。我怀疑代码可以大大简化。

您当前代码中的至少一个问题是:

    UPDATE stg.PrematureLoanSettlementRequest
        SET a.CountryId = b.ContractID

ab 均未定义。

【讨论】:

另外,我不认为他打算将 countryID 设置为 contractID @Beth。 . .不考虑 OP 编写的代码。无论意图如何,ab 都是未定义的。

以上是关于SQL71501:过程包含对对象的未解析引用的主要内容,如果未能解决你的问题,请参考以下文章

sql71501 sql 参数未解决对内置类型 Visual Studio 2012 DB 项目的引用

修复或避免在 SSDT 引用 Azure 托管实例中的主数据库时出现 SQL71501 和 SQL71561 构建错误?

SQLSERVER创建该存储过程时不会出错,但是执行存储过程时报错

数据库项目中的 Oracle 链接服务器警告消息“对对象有未解析的引用”

Android Studio:无效缓存/重启后对活动主的未解析引用

图解JAVA对象的创建过程