SQL71561错误:跨库视图指定列时引用未解析问题求助
问题:SQL Database项目引用DACpac后指定列创建视图报SQL71561错误
使用Azure Data Studio的SQL Database项目,已将源数据库导出为DACpac并添加数据库引用。用SELECT *创建跨库视图可正常构建部署,但指定具体列(如[ucode])时触发SQL71561错误,提示列引用未解析。已尝试关闭VerificationExtract和VerifyExtendedTransactSQLObjectName配置,问题仍存在。
可正常构建的视图代码
CREATE VIEW [dbo].[v_activitypointer] AS SELECT * FROM [$(dvdbname)].[dbo].[ap_partitioned]; GO
触发错误的视图代码
CREATE VIEW [dbo].[v_activitypointer] AS SELECT [ucode] FROM [$(dvdbname)].[dbo].[ap_partitioned]; GO
错误信息
c:\dbt\cicdtest\v_activitypointer.sql(2,13,2,13): Build error SQL71561: SqlView: [dbo].[v_activitypointer] has an unresolved reference to object [$(dvdbname)].[dbo].[ap_partitioned].[ucode]. [c:dbtcicdtestcicdtest.sqlproj] c:dbtcicdtestv_activitypointer.sql(2,13,2,13): Build error SQL71561: SqlComputedColumn: [dbo].[v_activitypointer].[ucode] has an unresolved reference to object [$(dvdbname]).[dbo].[ap_partitioned].[ucode]. [c:dbtcicdtestcicdtest.sqlproj] stdout: 0 Warning(s) stdout: 2 Error(s)
.sqlproj文件内容
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build"> <Sdk Name="Microsoft.Build.Sql" Version="0.1.12-preview" /> <PropertyGroup> <Name>cicdtest</Name> <ProjectGuid>{25E6C2C6-1C07-4516-BDC0-06E5AF0DCE07}</ProjectGuid> <DSP>Microsoft.Data.Tools.Schema.Sql.SqlServerlessDatabaseSchemaProvider</DSP> <ModelCollation>1033, CI</ModelCollation> <VerificationExtract>false</VerificationExtract> <VerifyExtendedTransactSQLObjectName>False</VerifyExtendedTransactSQLObjectName> </PropertyGroup> <ItemGroup> <SqlCmdVariable Include="dvdbname"> <Value>$(SqlCmdVar__1)</Value> <DefaultValue>dataverse_uunq6705</DefaultValue> </SqlCmdVariable> </ItemGroup> <ItemGroup> <ArtifactReference Include="..\dataverse_uunq6705.dacpac"> <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors> <DatabaseVariableLiteralValue>dataverse_uunq6705</DatabaseVariableLiteralValue> </ArtifactReference> </ItemGroup> <Target Name="BeforeBuild"> <Delete Files="$(BaseIntermediateOutputPath)\project.assets.json" /> </Target> </Project>
可行解决方案
- 校验DACpac完整性:用
SqlPackage.exe等工具展开DACpac,确认[dbo].[ap_partitioned]表的ucode列元数据存在,避免导出时遗漏列定义。 - 修正变量映射:确保
ArtifactReference的DatabaseVariableLiteralValue与SqlCmdVariable的DefaultValue完全一致,无大小写或拼写差异。 - 忽略指定警告:在
.sqlproj的<PropertyGroup>中添加配置,强制跳过71561错误校验:<SuppressTSqlWarnings>71561</SuppressTSqlWarnings> - 用同义词中转引用:创建指向源表的同义词,通过同义词访问列,绕开跨库引用解析问题:
CREATE SYNONYM [dbo].[ap_partitioned] FOR [$(dvdbname)].[dbo].[ap_partitioned]; GO CREATE VIEW [dbo].[v_activitypointer] AS SELECT [ucode] FROM [dbo].[ap_partitioned]; GO - 升级SDK版本:当前使用的是预览版
0.1.12-preview,升级到最新稳定版,修复已知的引用解析bug。
内容的提问来源于stack exchange,提问作者user17554171
相关产品推荐
相关产品推荐

