2011-03-18 119 views
8

我已经将我的SQL Server 2005数据库导入到VS2010数据库项目。我的一个存储过程包含类似Visual Studio数据库项目 - 未解决参考临时表

INSERT INTO #myTemp声明...

和Visual Studio给了我一个警告,如

SQL04151:步骤:[DBO ]。[mySproc]有一个未解析的对象[#myTemp]的引用。

有没有办法解决这个引用?我想尽可能多地清理项目警告。

+0

是否在存储过程中创建临时表? – Thomas 2011-04-19 04:24:07

+0

不,在这种情况下,临时表由一个“父”存储过程创建,然后在一个循环中多次调用这个过程:( – Nick 2011-04-19 11:00:44

回答

0

如果您知道代码没有问题,则可以禁止构建警告。转到你的项目设置,你会发现一个名为Build的标签。有一个领域可以添加你想压制的代码。我搜索并找到了this page,描述了这些步骤。

+4

我不认为抑制所有的SQL04151错误是一个好主意。将删除临时表消息,但你也会压制其他所有的数据库引用警告... – GordonB 2011-04-19 10:45:52

+0

然后使用: '#pragma warning disable 4151 /* SOME CODE */ #pragma warning restore 4151' Be肯定要添加注释,说明为什么要禁用警告。 – slimburrok 2011-04-19 21:18:12

+3

#pragma在.sql文件中不起作用。 – 2011-09-19 18:24:21

0

显然,VS不知道这个存储过程只能在另一个存储过程中执行,这个存储过程创建了这个临时表。一个解决办法是将代码添加到创建如有必要

If object_id('tempdb..#MyTemp') Is Null 
    Create Table #MyTemp 
     (
     ... 
     ) 

如果总是从父叫临时表,在理论上面的代码不应该运行的程序。

8

我有同样的事情,父母创建它。如果不存在,通过创建表来摆脱警告,而不是如果它不存在,我希望能够抛出异常。在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 
相关问题