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/… 我想你会想改变上面的set
SET a.CountryId = b.ContractID
来匹配下面的,比如SET a.ContractID = b.ContractID
【参考方案1】:
你应该问另一个问题,提供样本数据和你想做什么。我怀疑代码可以大大简化。
您当前代码中的至少一个问题是:
UPDATE stg.PrematureLoanSettlementRequest
SET a.CountryId = b.ContractID
a
和 b
均未定义。
【讨论】:
另外,我不认为他打算将 countryID 设置为 contractID @Beth。 . .不考虑 OP 编写的代码。无论意图如何,a
和 b
都是未定义的。以上是关于SQL71501:过程包含对对象的未解析引用的主要内容,如果未能解决你的问题,请参考以下文章
sql71501 sql 参数未解决对内置类型 Visual Studio 2012 DB 项目的引用
修复或避免在 SSDT 引用 Azure 托管实例中的主数据库时出现 SQL71501 和 SQL71561 构建错误?
SQLSERVER创建该存储过程时不会出错,但是执行存储过程时报错
数据库项目中的 Oracle 链接服务器警告消息“对对象有未解析的引用”