首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不存在的SqlPackage解析表

不存在的SqlPackage解析表
EN

Database Administration用户
提问于 2020-06-26 20:00:35
回答 1查看 516关注 0票数 2

通过使用sqlpackage.exe提取dacpac并验证架构,我试图验证Server 2016数据库的完整性:

代码语言:javascript
复制
 ./sqlpackage.exe  /DiagnosticsFile:"diagnostics_users.txt`"   /Action:Extract /TargetFile: "users.dacpac"   /SourceConnectionString:"connstring"  /p:VerifyExtraction=true"

当我运行它时,我得到输出

代码语言:javascript
复制
Resolving references in schema model
Successfully extracted database and saved it to file

但是,当我检查源数据库时,有一个存储过程引用数据库中不存在的表。如果我试图在SSMS中运行它,就会得到错误:Invalid object name '[Old_Database].dbo.VIEWER_LOG'。但是,SqlPackage没有将此标记为错误。

当我在诊断日志中搜索时,我确实看到了以下内容:

代码语言:javascript
复制
Microsoft.Data.Tools.Diagnostics.Tracer Verbose: 1 : ColumnResolver: #34027998 ResolvedDescriptor for column:
ResolvedDescriptor: [DATE_TIME_STAMP] 
Potentials(1):
    [SqlColumn : P1 - [OLD_DATABASE.dbo.VIEWER_LOG.DATE_TIME_STAMP]]

Available Column Sources:
ColumnSource VIEWER_LOG (affinity = 1) with no known columns

目标数据库上有一个名为Viewer_Log的表,但是由于OLD_DATABASE.DBO不存在,所以没有使用模式OLD_DATABASE.dbo.VIEWER_LOG.DATE_TIME_STAMP。在解析引用时,SqlPackage不应该将其标记为错误吗?是否有可用于检测和标记此配置的配置?

EN

回答 1

Database Administration用户

发布于 2020-06-30 21:24:49

我在本文https://www.sqlservercentral.com/forums/topic/create-or-alter-procedure-not-detecting-invalid-object-names-1中找到了答案--基本上,存储过程使用“后期绑定”,它允许在编译时允许不存在的实体,并在运行时进行解析。此链接还提供了一个有用的SQL脚本来检测这些问题。

此外,我还创建了一个部署后脚本,可以在SSDT中使用该脚本在部署之后验证给定的数据库没有未解决的引用( https://gist.github.com/DarylSmith/ff69ee75dc1bb61af44dc9b9d9e00d7a )。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/269975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档