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?

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 

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'

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.