SQL 数据库项目对动态临时表的引用

Posted

技术标签:

【中文标题】SQL 数据库项目对动态临时表的引用【英文标题】:SQL Database Project References to on-the-fly Temp Tables 【发布时间】:2012-12-06 17:13:11 【问题描述】:

我正在尝试使用现在位于 SQL Server 2008 R2 上的旧数据库,并在 Visual Studio 2010 中为其创建一个数据库项目。有几个存储过程使用了一些“即时”临时表(SELECT * INTO #NewTempTable 的那种)显然这会导致数据库项目中出现一些 SQL04151 引用警告。

有什么方法可以修复或忽略这些特定警告?我知道直接的答案可能是在过程中实际声明临时表并定义列,但在这一点上,这不是一个选项。

【问题讨论】:

【参考方案1】:

这似乎不是 VS 2010 的最新数据库项目类型的问题,作为SQL Server Data Tools 的一部分安装。

尝试安装 SQL Server Data Tools。安装后,您可以通过在解决方案资源管理器中右键单击它来将数据库项目升级到新类型。 (新项目类型向后兼容 SQL 2008 和 SQL 2005,并且还进行了一些重大改进。)

仅供参考,新项目类型有一个非常通用的名称“SQL Server 数据库项目”,您会在“SQL Server”模板组中找到它,而不是“数据库 > SQL Server”组。

【讨论】:

【参考方案2】:

在您的存储过程中转入SET FMTONLY OFF

来自 MSDN:

仅将元数据返回给客户端。可以用来测试格式 没有实际运行查询的响应。

您的问题是默认情况下 Visual Studio 已打开此设置...这允许它在不运行查询的情况下确定响应的格式,但如果使用临时表,这将不起作用。

以下是 MS Connect 上对此问题的讨论:Improve FMTONLY Intelligence

根据 Microsoft 的回复,此问题已在 2012 年修复,但不会在早期版本中解决。

最后,here's a related discussion on the FMTONLY issue。

【讨论】:

将 SET FMTONLY OFF 放在我的存储过程的开头似乎并没有让 VS 知道。仍然收到相同的警告。当您说“在您的存储过程中关闭 SET FMTONLY”时,您的意思是在开始时声明它,还是在 VS 中某处有设置? 您可以在存储过程之外使用SET FMTONLY OFF 吗?如果没有,这可能不是您问题的解决方案...

以上是关于SQL 数据库项目对动态临时表的引用的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL 动态 SQL 和临时表

关于sqlserver临时表的问题,请教高手!

SQL Server 表变量和临时表的区别

sqlserver 日期表的问题。

第十一节:视图和临时表

删除系统版本化时态表的过程