我已经将我的SQL Server 2005数据库导入到VS2010数据库项目。我的一个存储过程包含类似Visual Studio数据库项目 - 未解决参考临时表
INSERT INTO #myTemp声明...
和Visual Studio给了我一个警告,如
SQL04151:步骤:[DBO ]。[mySproc]有一个未解析的对象[#myTemp]的引用。
有没有办法解决这个引用?我想尽可能多地清理项目警告。
我已经将我的SQL Server 2005数据库导入到VS2010数据库项目。我的一个存储过程包含类似Visual Studio数据库项目 - 未解决参考临时表
INSERT INTO #myTemp声明...
和Visual Studio给了我一个警告,如
SQL04151:步骤:[DBO ]。[mySproc]有一个未解析的对象[#myTemp]的引用。
有没有办法解决这个引用?我想尽可能多地清理项目警告。
你尝试三部分组成的命名为这里 (VS 2010 build database project receive SQL04151)
您可能还需要更改数据库裁判tempdb的,而不是主人。看到这篇文章(http://blogs.msdn.com/b/gertd/archive/2009/06/10/system-objects-in-tempdb.aspx)。它描述了sys对象,但临时表存储在tempdb中,因此会显示相同的行为。
如果您知道代码没有问题,则可以禁止构建警告。转到你的项目设置,你会发现一个名为Build的标签。有一个领域可以添加你想压制的代码。我搜索并找到了this page,描述了这些步骤。
我不认为抑制所有的SQL04151错误是一个好主意。将删除临时表消息,但你也会压制其他所有的数据库引用警告... – GordonB 2011-04-19 10:45:52
然后使用: '#pragma warning disable 4151 /* SOME CODE */ #pragma warning restore 4151' Be肯定要添加注释,说明为什么要禁用警告。 – slimburrok 2011-04-19 21:18:12
#pragma在.sql文件中不起作用。 – 2011-09-19 18:24:21
显然,VS不知道这个存储过程只能在另一个存储过程中执行,这个存储过程创建了这个临时表。一个解决办法是将代码添加到创建如有必要
If object_id('tempdb..#MyTemp') Is Null
Create Table #MyTemp
(
...
)
如果总是从父叫临时表,在理论上面的代码不应该运行的程序。
我有同样的事情,父母创建它。如果不存在,通过创建表来摆脱警告,而不是如果它不存在,我希望能够抛出异常。在return语句之后放置一条CREATE语句可以保证它永远不会被运行,同时也会清除警告。
IF (OBJECT_ID('tempdb..#Foo') is null)
BEGIN
Raiserror('#Foo doesn''t exist.', 16, 1)
RETURN
CREATE TABLE #Foo (foo int) --Here just to get rid of compile warning
END
是否在存储过程中创建临时表? – Thomas 2011-04-19 04:24:07
不,在这种情况下,临时表由一个“父”存储过程创建,然后在一个循环中多次调用这个过程:( – Nick 2011-04-19 11:00:44