Проект базы данных Visual Studio - неразрешенная ссылка на временную таблицу - PullRequest
9 голосов
/ 18 марта 2011

Я импортировал свою базу данных sql server 2005 в проект базы данных VS2010.Одна из моих хранимых процедур содержит оператор, похожий на

INSERT INTO #myTemp ...

, и Visual Studio выдает мне предупреждение, например

SQL04151: Процедура: [dbo]. [MySproc] имеет неразрешенную ссылку на объект [#myTemp].

Есть ли способ разрешения этой ссылки?Я хотел бы удалить как можно больше предупреждений проекта.

Ответы [ 4 ]

9 голосов
/ 19 сентября 2011

У меня было то же самое, где его создает родитель. Вместо того, чтобы избавиться от предупреждения путем создания таблицы, если она не существует, я хочу иметь возможность генерировать исключение, если оно не существует. Помещение оператора CREATE после оператора return гарантирует, что он никогда не будет запущен, но также очищает предупреждение.

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 голос
/ 12 апреля 2011

Вы пробовали три части именования, как здесь ( VS 2010, сборка проекта базы данных, получение SQL04151 )

Также вам может потребоваться изменить ссылку на db на tempdb вместо master. См. Эту статью (http://blogs.msdn.com/b/gertd/archive/2009/06/10/system-objects-in-tempdb.aspx). В ней описываются объекты sys, но временные таблицы хранятся в базе данных tempdb, поэтому поведение будет таким же.

0 голосов
/ 19 апреля 2011

Очевидно, что VS не знает, что этот хранимый процесс должен выполняться только из другого хранимого процесса, который создает эту временную таблицу. Одним из решений было бы добавить код к процедуре, которая создает временную таблицу при необходимости

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

Если всегда вызывается из родительского объекта, теоретически приведенный выше код никогда не должен запускаться.

0 голосов
/ 18 апреля 2011

Если вы знаете, что с вашим кодом нет проблем, вы можете отключить предупреждения о сборке. Зайдите в настройки вашего проекта, и вы найдете вкладку под названием Build. Там есть поле для добавления кодов, которые вы хотите подавить. Я гуглил и нашел эту страницу , описывающую шаги.

...