Come determinare se esiste una tabella in un database SQL Server in SQL Server 2008?


13

Come determinare se esiste una tabella in un database SQL Server in SQL Server 2008?

Risposte:


18

Se si esegue una query sulla tabella sysobjects, con una query simile

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

xtype = 'U' è una tabella utente

puoi quindi concludere che questa è un'istruzione IF EXISTS

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

5
+1 È importante notare che Microsoft ha spostato funzionalità come questa in Dynamic Management Views (DMV) da SQL Server 2005. Ciò funzionerà tecnicamente, ma Microsoft ora consiglia di utilizzare DMV sys.tables per questo. SE ESISTE (SELEZIONA * DA sys.tables DOVE type = 'U' AND name = 'yourTableName'). Funzionalmente, la tua affermazione e la mia affermazione fanno esattamente la stessa cosa. Volevo solo menzionare i DMV. Per ulteriori informazioni sui DMV, consulta la documentazione msdn.microsoft.com/en-US/library/ms188754%28v=SQL.105%29.aspx
Matt M

È una bella telefonata, Matt. Le vecchie abitudini sono dure a morire :-) Il tuo è il modo migliore.
Miglia D

1
Non sono sicuro che faccia molta differenza, ma preferirei SE ESISTE (SELEZIONA 1 DA sys.tables ...)
David Hayes,

@DavidHayes Sì, immagino che questa soluzione sia più veloce perché non esegue una query per trovare i nomi delle colonne.
Xriuk

12

Ecco un altro modo per trovarlo

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

Bello e semplice, non è necessario eseguire query su tabelle di sistema complesse. Grazie!
Shadow9

2
Questo non rileverebbe, ad esempio, viste con lo stesso nome? Forse le procedure memorizzate e così pure?
MarioDS,

Non se lo schema qualifica l'oggetto.
Concedi Fritchey

1
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'your table name here')
BEGIN
  PRINT 'Table Exists'
END
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.