Como determinar se existe uma tabela em um banco de dados do SQL Server no SQL Server 2008?

13

Como determinar se existe uma tabela em um banco de dados do SQL Server no SQL Server 2008?

Amir Rezaei
fonte

Respostas:

18

Se você consultar a tabela sysobjects, com uma consulta como

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

xtype = 'U' é uma tabela de usuário

você pode então envolver esta é uma instrução IF EXISTS

IF EXISTS (SELECT * FROM sysobjects ...)
BEGIN
    ' do your stuff here if it exists
END 
Miles D
fonte
5
+1 É importante observar que a Microsoft moveu funcionalidades como essa para DMVs (Dynamic Management Views) desde o SQL Server 2005. Isso funcionará tecnicamente, mas a Microsoft agora recomenda o uso da sys.tables DMV para isso. SE EXISTE (SELECT * FROM sys.tables WHERE type = 'U' AND name = 'yourTableName'). Funcionalmente, sua declaração e minha declaração fazem exatamente a mesma coisa. Só queria mencionar DMVs. Para saber mais sobre DMVs, consulte a documentação msdn.microsoft.com/en-US/library/ms188754%28v=SQL.105%29.aspx
Matt M
Essa é uma boa ligação, Matt. Velhos hábitos são difíceis de morrer :-) O seu é o melhor caminho.
Miles D
1
Eu não tenho certeza se isso faz muita diferença, mas eu favor, se existe (selecione 1 sys.tables ...)
David Hayes
@DavidHayes Sim, acho que essa solução é mais rápida porque não consulta para encontrar nomes de colunas.
Xriuk
12

Aqui está mais uma maneira de encontrá-lo

IF OBJECT_ID('tablename') IS NULL
PRINT 'Table Does not Exist'
Nômade
fonte
Agradável e simples, não há necessidade de consultar tabelas complexas do sistema. Obrigado!
Shadow9
2
Isso não detectaria, por exemplo, visões com o mesmo nome? Talvez procedimentos armazenados e como também?
MarioDS
Não se o esquema qualificar o objeto.
Grant Fritchey
1
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'your table name here')
BEGIN
  PRINT 'Table Exists'
END
Divya Diya
fonte