SQL Server 2008'de bir SQL Server veritabanında bir tablonun olup olmadığını nasıl belirleyebilirim?


13

SQL Server 2008'de bir SQL Server veritabanında bir tablonun olup olmadığını nasıl belirleyebilirim?

Yanıtlar:


18

Sysobjects tablosunu,

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

xtype = 'U' bir kullanıcı tablosu

daha sonra bu bir IF EXISTS ifadesidir

IF EXISTS (SELECT * FROM sysobjects ...)
BEGIN
    ' do your stuff here if it exists
END 

5
+1 Microsoft'un SQL Server 2005'ten bu yana bu gibi işlevleri Dinamik Yönetim Görünümlerine (DMV) taşıdığını belirtmek önemlidir. Bu teknik olarak çalışır, ancak Microsoft şimdi bunun için sys.tables DMV kullanılmasını önerir. EĞER VARSA (SELECT * FYS sys.tables NEREDE tür = 'U' VE ad = 'yourTableName'). İşlevsel olarak, ifadeniz ve ifadem aynı şeyi yapar. Sadece DMV'lerden bahsetmek istedim. DMV'ler hakkında daha fazla bilgi edinmek için msdn.microsoft.com/tr-TR/library/ms188754%28v=SQL.105%29.aspx
Matt M

İyi bir arama Matt. Eski alışkanlıklar çok ölüyor :-) Seninki daha iyi bir yol.
Miles D

1
Çok fazla fark yaratıp yaratmadığından emin değilim ama EĞER VARSA (Sys.tables'dan 1 SEÇİN)
David Hayes

@DavidHayes Evet, bu çözümün sütun adlarını bulmak için sorgulamadığı için daha hızlı olduğunu düşünüyorum.
Xriuk

12

İşte onu bulmanın bir yolu daha

IF OBJECT_ID('tablename') IS NULL
PRINT 'Table Does not Exist'

Güzel ve basit, karmaşık sistem tablolarını sorgulamaya gerek yok. Teşekkürler!
Gölge Sihirbazı Senin için

2
Örneğin, aynı addaki görünümleri algılamaz mı? Belki de saklı yordamlar ve benzeri?
MarioDS

Şemayı nesneyi nitelendirdiğinizde değil.
Grant Fritchey

1
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'your table name here')
BEGIN
  PRINT 'Table Exists'
END
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.