Visual studio 2017 VS2017/VS2019-SQL Server数据库项目-连接到用户定义的表类型会中断架构验证 使用Visual Studio 2017/2019(最新更新) SQL Server数据库项目(创建了一个全新的项目进行测试) 以Azure SQL数据库V12为目标

Visual studio 2017 VS2017/VS2019-SQL Server数据库项目-连接到用户定义的表类型会中断架构验证 使用Visual Studio 2017/2019(最新更新) SQL Server数据库项目(创建了一个全新的项目进行测试) 以Azure SQL数据库V12为目标,visual-studio-2017,visual-studio-2019,sql-server-data-tools,Visual Studio 2017,Visual Studio 2019,Sql Server Data Tools,我们注意到,在VisualStudio中加入用户定义的表类型(UDTT)时,脚本的模式验证被禁用。因此,如果存在键入错误的列名,例如,构建(本地或Azure DevOps构建服务器上)不会捕获错误 下面是一个完整的例子来说明这个问题 在本例中,修改了表“RealTable”,删除了列“MissingColumn”。即使仍在引用“MissingColumn”,构建也没有失败 在试图找出构建没有中断的原因时,我发现注释UDTT的连接恢复了构建和IDE中的模式验证 是否可以修复此问题?如果我将上述脚本

我们注意到,在VisualStudio中加入用户定义的表类型(UDTT)时,脚本的模式验证被禁用。因此,如果存在键入错误的列名,例如,构建(本地或Azure DevOps构建服务器上)不会捕获错误

下面是一个完整的例子来说明这个问题

在本例中,修改了表“RealTable”,删除了列“MissingColumn”。即使仍在引用“MissingColumn”,构建也没有失败

在试图找出构建没有中断的原因时,我发现注释UDTT的连接恢复了构建和IDE中的模式验证

是否可以修复此问题?如果我将上述脚本复制到SSMS中,验证将按预期工作

演示行为的屏幕截图


我认为在VS模式中,只有在存在连接时才能实现验证。请记住,SSMS与VS2019中的sql db项目不同。我认为VS模式中的验证只有在有连接时才能实现。请记住,SSMS不同于VS2019中的sql db项目。
create table dbo.RealTable (RealColumn int not null); 
go

create type dbo.TableOfNVarchar20 as table (Value nvarchar(20) not null);
go

create procedure dbo.usp_ProcReferencingMissingColumn 
    @tableOf20 dbo.TableOfNVarchar20 readonly
as
begin
    set nocount on;

    select   top (1)
             rt.MissingColumn
    from     dbo.RealTable rt

    -- this join breaks all (column level) schema validation in Visual Studio
    join     @tableOf20 ou on ou.Value = rt.RealColumn

    where    rt.MissingColumn > getdate()
    order by rt.MissingColumn desc;
end;