Jak ustalić, czy tabela istnieje w bazie danych SQL Server w SQL Server 2008?

13

Jak ustalić, czy tabela istnieje w bazie danych SQL Server w SQL Server 2008?

Amir Rezaei
źródło

Odpowiedzi:

18

W przypadku zapytania do tabeli sysobjects za pomocą zapytania podobnego do

SELECT * FROM sysobjects WHERE xtype = 'U' AND name = 'yourTableName'

xtype = „U” to tabela użytkownika

następnie możesz zawinąć to jest JEŻELI ISTNIEJE

IF EXISTS (SELECT * FROM sysobjects ...)
BEGIN
    ' do your stuff here if it exists
END 
Mile D.
źródło
5
+1 Należy zauważyć, że Microsoft przenosi taką funkcjonalność do Dynamicznych widoków zarządzania (DMV) od SQL Server 2005. To technicznie będzie działać, ale Microsoft zaleca teraz używanie do tego sys.tables DMV. JEŚLI ISTNIEJE (WYBIERZ * Z tabel sys.there WHERE type = 'U' AND name = 'yourTableName'). Funkcjonalnie twoje oświadczenie i moje oświadczenie robią dokładnie to samo. Chciałem tylko wspomnieć o DMV. Aby dowiedzieć się więcej o DMV, zapoznaj się z dokumentacją msdn.microsoft.com/en-US/library/ms188754%28v=SQL.105%29.aspx
Matt M
To dobry telefon Matt. Stare nawyki umierają ciężko :-) Twój sposób jest lepszy.
Miles D
1
Nie jestem pewien, czy to robi dużą różnicę, ale wolałbym JEŚLI ISTNIEJE (WYBIERZ 1 Z tabel sys.tab ...)
David Hayes
@DavidHayes Tak, myślę, że to rozwiązanie jest szybsze, ponieważ nie wyszukuje nazw kolumn.
Xriuk
12

Oto jeszcze jeden sposób na znalezienie tego

IF OBJECT_ID('tablename') IS NULL
PRINT 'Table Does not Exist'
Koczownik
źródło
Ładne i proste, nie trzeba wyszukiwać złożonych tabel systemowych. Dzięki!
Shadow Wizard is Ear For You
2
Czy nie wykryłoby to na przykład widoków o tej samej nazwie? Może procedury składowane i tym podobne?
MarioDS,
Nie, jeśli schemat kwalifikuje obiekt.
Grant Fritchey,
1
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'your table name here')
BEGIN
  PRINT 'Table Exists'
END
Divya Diya
źródło