我已将sql server 2005数据库导入到VS2010数据库项目中。我的一个存储过程包含类似于
的语句INSERT INTO #myTemp ...
和Visual Studio给了我一个警告,例如
SQL04151:过程:[dbo]。[mySproc]对象[#myTemp]有一个未解析的引用。
有没有办法解决这个问题?我想尽可能多地清除项目警告。
答案 0 :(得分:9)
我有同样的事情,父母创造它。如果它不存在,而不是通过创建表来消除警告,我希望能够抛出异常,如果它不存在。在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
答案 1 :(得分:1)
您是否尝试过三个部分命名,如此处所示 (VS 2010 build database project receive SQL04151)
此外,您可能需要将db ref更改为tempdb而不是master。请参阅此文章(http://blogs.msdn.com/b/gertd/archive/2009/06/10/system-objects-in-tempdb.aspx)。它描述了sys对象,但临时表存储在tempdb中,因此会表现出相同的行为。
答案 2 :(得分:0)
如果您知道代码没有问题,可以取消构建警告。转到项目的设置,您将找到一个名为Build的选项卡。那里有一个字段可以添加您想要抑制的代码。我用Google搜索并找到了this page,描述了这些步骤。
答案 3 :(得分:0)
显然,VS不知道这个存储过程只是从创建这个临时表的另一个存储过程中执行。一种解决方案是在必要时将代码添加到创建临时表的过程中
If object_id('tempdb..#MyTemp') Is Null
Create Table #MyTemp
(
...
)
如果总是从父节点调用,理论上上面的代码永远不会运行。