7

我正在学习 Visual Studio 2012 的“数据库项目”系统,使用带有 Update 1 的 Visual Studio 2012 以及 SSDT。

我发现它非常擅长在我的数据库中发现真正的问题,尤其是存储过程中的编程错误,其中有人从数据库表中删除了一个字段,但没有检查并验证所有存储过程是否执行没有错误。因此,通过 Visual Studio 2012 中的“build”命令验证您的 .sql 脚本非常方便。我舍不得放弃它。

但我还注意到,每当在存储过程中使用 #TEMPTABLE 时,即使关闭了“为公共对象启用扩展 Transact-SQL 验证”,我仍然会遇到涉及存储过程中 #temptable.field 引用的“构建错误”。

数据库项目采取哪些步骤来确定临时表的架构?由于根据定义,我的临时表不存在于主架构中,因此当我在创建数据库后立即通过“导入数据库”选项将真正的生产 SQL 数据库导入 Visual Studio 时,它们没有进入我的数据库项目。

我应该创建“#TEMPTABLE.SQL”文件并将它们添加到我的项目中吗?

示例错误:

c:\dev\...\dbo\Stored Procedures\xyz.sql(95,96): Warning:  SQL71502: Procedure: [dbo].[proc123] has an unresolved reference to object [#temptable1].[somefield1].

如果有一种方法可以包含一个脚本,该脚本定义了一次使用的临时表,并将其包含在需要了解这些的各个地方,如果要彻底验证 T-SQL,那很好,如果 Turning扩展验证做了我认为应该做的事情,那么也许什么都不需要了。

论坛帖子表明这是不可能解决的,我所能做的就是在文件级别有效地关闭这个警告,这有点可怕。

一个关于同一主题但针对 Visual Studio 2010 的问题表明,这是一个该技术已经完全被破坏的领域,微软多年来一直知道它并且对此没有采取任何行动。VS2012.U1+SSDT_Dec2012 现在有什么更好的吗?

4

1 回答 1

3

那是临时表的问题,您应该使用表值函数。

于 2013-09-29T16:22:25.943 回答