2011-03-18 3 views
8

Zaimportowałem bazę danych mojego serwera sql 2005 do projektu bazy danych VS2010. Jeden z moich procedur przechowywanych zawiera oświadczenie podobną doProjekt bazy danych Visual Studio - nierozwiązane odniesienie do tabeli temp.

INSERT INTO #myTemp ...

i Visual Studio daje mi ostrzeżenie, takie jak

SQL04151 Procedura: [dbo ] [mySproc] ma nierozwiązane odniesienie do obiektu [#myTemp].

Czy istnieje sposób rozwiązania tego odniesienia? Chciałbym usunąć jak najwięcej ostrzeżeń projektowych.

+0

Czy tabela tymczasowa została utworzona w procedurze przechowywanej? – Thomas

+0

Nie, w tym przypadku tabela tymczasowa jest tworzona przez "macierzysty" przechowywany proces, który następnie wywołuje ten numer wiele razy w pętli :( – Nick

Odpowiedz

0

Jeśli wiesz, że nie ma problemu z kodem, możesz wyłączyć ostrzeżenia dotyczące kompilacji. Przejdź do ustawień swojego projektu, a znajdziesz kartę o nazwie Build. Tam jest pole do dodawania kodów, które chcesz tłumić. Wyszukałem go i odnalazłem this page, opisując kroki.

+4

Nie sądzę, że tłumienie wszystkich błędów SQL04151 jest świetnym pomysłem. pozbyć się komunikatów tabeli tymczasowej, ale będziesz także tłumić każde inne ostrzeżenie o odwołaniach do bazy danych ... – GordonB

+0

Następnie użyj: '# ostrzeżenie o wygaśnięciu ostrzeżenia 4151 /* NIEKTÓRY KOD */ #pragma ostrzeżenie przywróć 4151' Be upewnij się, że dodałeś komentarze, dlaczego wyłączasz ostrzeżenie. – slimburrok

+3

#pragma nie działa w plikach .sql. –

0

Oczywiście VS nie wie, że ten zapisany proces może być wykonany tylko z innego zapisanego procesu, który tworzy tę tabelę tymczasową. Jednym z rozwiązań byłoby dodać kod do procedury, która tworzy tabelę jeśli niezbędne

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

Jeśli zawsze nazywany od rodzica temp teoretycznie powyższy kod nie powinien uruchomić.

8

Miałem to samo, gdzie rodzic je tworzy. Zamiast pozbywać się ostrzeżenia, tworząc tabelę, jeśli nie istnieje, chcę móc wygenerować wyjątek, jeśli tak się nie stanie. Umieszczenie instrukcji CREATE po instrukcji return gwarantuje, że nigdy się nie uruchomi, ale także usunie ostrzeżenie.

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