tSQLt V1.0.8083.3529 不会在 Visual Studio 2022 中构建

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

我有一个数据库测试项目,当我进行构建时,tSQLt 出现错误:

SQL71501: View: [tSQLt].[Private_HostPlatform] has an unresolved reference to object [sys].[dm_os_host_info].[host_platform].
SQL71501: View: [tSQLt].[Private_HostPlatform] has an unresolved reference to object [sys].[dm_os_host_info].
SQL71501: Computed Column: [tSQLt].[Private_HostPlatform].[host_platform] has an unresolved reference to object [sys].[dm_os_host_info].[host_platform].

如果我删除文件:

tSQLt\函数\info.sql

tSQLt\Functions@tSQLt_RunOnlyOnHostPlatform.sql

tSQLt\Views\Private_HostPlatform.sql

我可以构建项目,但由于 tSQLt 错误,它不会发布。大约三年前,我在使用 tSQLt 做的最后一个项目中没有遇到这个问题,我不知道如何清除这些错误。如何解决这些构建问题?

谢谢你,

大卫

visual-studio-2022 tsqlt
2个回答
0
投票

我们在这里遇到同样的问题。刚刚在两个版本中打开了同一个 GIT 项目。 2019 年构建良好,但 2022 年因相同的错误参考而失败。之前我遇到这个问题时注意到,这是一个与项目版本不同的主数据库版本。

编辑:

所以我弄清楚了我遇到的确切问题。使用“Microsoft Azure SQL 数据库”的目标平台时,这些视图似乎不包含在主数据库中。如果您选择“SQL Server 2019 或 Azure SQL 数据库托管实例”,则查找这些视图没有问题。

如果您阅读此处的“...的功能”部分,(https://learn.microsoft.com/en-us/azure/azure-sql/database/features-comparison?view=azuresql)它说那个

系统目录视图 一些 - 查看各个视图

意味着缺少一些视图。我假设那些 dm_os_... 视图由于某种原因被排除在外。


0
投票

迟到总比不到好......

我不完全确定为什么面向 MSSQL 2017 并引用另一个数据库的 VS 2022 数据库项目无法在视图中使用该数据库引用。欣赏这个声明有点令人困惑,所以这就是发生的事情:

[tSQLt_db].[tSQLt].[Private_HostPlatform]
是引用
[master].[sys].[dm_os_host_info
的视图,如下所示:

CREATE   VIEW tSQLt.Private_HostPlatform AS SELECT host_platform FROM sys.dm_os_host_info;

VS 2022 将无法成功构建在视图中使用引用数据库字段的项目,在本例中,对

[master].[sys].[dm_os_host_info]
的引用将导致您注意到的三个错误:

SQL71501: View: [tSQLt].[Private_HostPlatform] has an unresolved reference to object [sys].[dm_os_host_info].[host_platform].
SQL71501: View: [tSQLt].[Private_HostPlatform] has an unresolved reference to object [sys].[dm_os_host_info].
SQL71501: Computed Column: [tSQLt].[Private_HostPlatform].[host_platform] has an unresolved reference to object [sys].[dm_os_host_info].[host_platform].

要解决此问题,请将视图

[tSQLt].[Private_HostPlatform]
更改为 TVF,如下所示:

CREATE FUNCTION
    tSQLt.Private_HostPlatform()

RETURNS @returntable TABLE (
    host_platform varchar(256)
)
AS
BEGIN
    INSERT
        @returntable

    SELECT
        host_platform
    
    FROM
        sys.dm_os_host_info;
END

完成后,重建项目,它应该可以编译。

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