Verifique se a tabela existe no SQL Server

1143

Eu gostaria que essa fosse a discussão final sobre como verificar se existe uma tabela no SQL Server 2000/2005 usando instruções SQL.

Quando você busca no Google a resposta, recebe muitas respostas diferentes. Existe uma maneira oficial / compatível com versões anteriores e posteriores?

Aqui estão duas maneiras possíveis de fazer isso. Qual das duas é a melhor / melhor maneira de fazê-lo?

Primeira maneira:

IF EXISTS (SELECT 1 
           FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_TYPE='BASE TABLE' 
           AND TABLE_NAME='mytablename') 
   SELECT 1 AS res ELSE SELECT 0 AS res;

Segunda maneira:

IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL 
   SELECT 1 AS res ELSE SELECT 0 AS res;

MySQL fornece o simples

SHOW TABLES LIKE '%tablename%'; 

declaração. Eu estou procurando algo semelhante.

Vincent
fonte
1
Por que é melhor usar INFORMATION_SCHEMA.TABLES em vez de sys.tables e filtrar com o nome qualquer, talvez adicionar uma verificação de valor type_desc?
DanteTheSmith # 1/17

Respostas:

1332

Para consultas como essa, é sempre melhor usar uma INFORMATION_SCHEMAexibição. Essas visualizações são (principalmente) padrão em muitos bancos de dados diferentes e raramente mudam de versão para versão.

Para verificar se existe uma tabela, use:

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND  TABLE_NAME = 'TheTable'))
BEGIN
    --Do Stuff
END
akmad
fonte
12
Funciona bem! No T-SQL (em resposta ao pôster original), porém, é TABLE_SCHEMA, não SCHEMA_NAME. Obrigado pela dica.
Nicholas Piasecki
10
Como não é garantido que um nome de objeto sozinho (ou seja, sem um esquema) seja exclusivo, não há uma maneira 100% segura de fazer isso. Se você estiver trabalhando com um banco de dados que não possui conflitos de nomes entre esquemas, simplesmente omitir "TABLE_SCHEMA = 'TheSchema'" funcionará perfeitamente.
Akmad
26
Para verificar uma tabela temporária, precisamos consultar o banco de dados tempdb e usar um operador LIKE para o nome da tabelaSELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'TheSchema' AND TABLE_NAME LIKE '#TheTable%'
Pierre-Alain Vigeant
4
Uma resposta abaixo que usa a função OBJECT_ID funcionar correctamente em relação por tabelas temporárias de ligação - stackoverflow.com/a/2155299/16147
rico Rousseau
4
O compilador de consultas @akmad SQL verificará a tabela antes de executar a consulta e falhará antes mesmo de iniciar.
Marc K
278

Observe também que, se por algum motivo você precisar verificar uma tabela temporária, poderá fazer isso:

if OBJECT_ID('tempdb..#test') is not null
 --- temp table exists
James Bloomer
fonte
10
O uso desse método parece respeitar a natureza por conexão das tabelas temporárias. A consulta INFORMATION_SCHEMA publicada anteriormente retornará linhas, independentemente da conexão que criou a tabela.
Rich Rousseau
238

Sempre usamos o OBJECT_IDestilo desde que me lembro

IF OBJECT_ID('*objectName*', 'U') IS NOT NULL 
Bob King
fonte
16
Acredito que isso seria rápido, embora não seja muito portátil. É garantido que as visualizações do esquema de informações existem em qualquer DBRMS que suporte o padrão. Além disso, o OBJECT_ID simples não garante que a tabela seja um objeto.
Joe Pineda
9
Obrigado Joe, eu queria saber por que você usaria OBJECT_ID vs INFORMATION_SCHEMA.TABLES vs sys.tables. Salientando que o INFORMAÇÕES_SCHEMA faz parte de um padrão, responde bastante a essa pergunta. BTW, é engraçado, um de nossos especialistas em banco de dados que eu faria essa pergunta tem o mesmo sobrenome que você, deve ser um bom sobrenome para bancos de dados.
Apeiron
24
@ JoePineda: Então você usa OBJECT_ID('TableName', 'U')para garantir que o objeto seja uma tabela.
Allon Guralnek 4/11/11
1
@AllonGuralnek, então, em vez de seguir um padrão simples e portátil, adicione mais informações criptográficas?
define
22
@DustinFineout: A pergunta foi marcada como tsql , portanto a portabilidade não se aplica tanto. Em geral, encontrei muito poucas bases de código verdadeiramente portáteis e, se a sucintividade for avaliada, é melhor do que escrever essa IF EXISTSconsulta a partir da resposta aceita repetidamente. Além disso, tudo é enigmático até você ler a documentação, especialmente em T-SQL (ou qualquer outra variante, na verdade).
Allon Guralnek
132

Por favor, veja as abordagens abaixo,

Abordagem 1: Usando a visualização INFORMATION_SCHEMA.TABLES

Podemos escrever uma consulta como abaixo para verificar se existe uma tabela Customers no banco de dados atual.

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Customers')
BEGIN
    PRINT 'Table Exists'
END

Abordagem 2: Usando a função OBJECT_ID ()

Podemos usar a função OBJECT_ID () como abaixo para verificar se existe uma tabela de clientes no banco de dados atual.

IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULL
BEGIN
    PRINT 'Table Exists'
END

Abordagem 3: Usando sys.Objects Catalog View

Podemos usar a exibição do catálogo Sys.Objects para verificar a existência da tabela, como mostrado abaixo:

IF EXISTS(SELECT 1 FROM sys.Objects WHERE  Object_id = OBJECT_ID(N'dbo.Customers') AND Type = N'U')
BEGIN
   PRINT 'Table Exists'
END

Abordagem 4: Usando o sys.Tables Catalog View

Podemos usar a exibição do catálogo Sys.Tables para verificar a existência da tabela, como mostrado abaixo:

 IF EXISTS(SELECT 1 FROM sys.Tables WHERE  Name = N'Customers' AND Type = N'U')
 BEGIN
      PRINT 'Table Exists'
 END

Abordagem 5: Evite usar a tabela do sistema sys.sysobjects

Devemos evitar o uso direto da tabela de sistema sys.sysobjects, pois o acesso direto a ela será preterido em algumas versões futuras do Sql Server. Conforme o link BOL da Microsoft, a Microsoft está sugerindo o uso das exibições de catálogo sys.objects / sys.tables em vez da tabela do sistema sys.sysobjects diretamente.

  IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' AND xtype = N'U')
  BEGIN
     PRINT 'Table Exists'
  END

consultado em: http://sqlhints.com/2014/04/13/how-to-check-if-a-table-exists-in-sql-server/

BrainCoder
fonte
37

Procurando uma tabela em um banco de dados diferente:

if exists (select * from MyOtherDatabase.sys.tables where name = 'MyTable')
    print 'Exists'
Larry Leonard
fonte
26

Só queria mencionar uma situação em que provavelmente seria um pouco mais fácil usar o OBJECT_IDmétodo. As INFORMATION_SCHEMAvisualizações são objetos em cada banco de dados -

As visualizações do esquema de informações são definidas em um esquema especial chamado INFORMAÇÕES_SCHEMA. Este esquema está contido em cada banco de dados.

https://msdn.microsoft.com/en-us/library/ms186778.aspx

Portanto, todas as tabelas que você acessa usando

IF EXISTS (SELECT 1 
           FROM [database].INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_TYPE='BASE TABLE' 
           AND TABLE_NAME='mytablename') 
   SELECT 1 AS res ELSE SELECT 0 AS res;

refletirá apenas o que está dentro [database]. Se você quiser verificar se existem tabelas em outro banco de dados, sem alterar dinamicamente a [database]cada vez, OBJECT_IDpermitirá que você faça isso imediatamente. Ex-

IF OBJECT_ID (N'db1.schema.table1', N'U') IS NOT NULL 
   SELECT 1 AS res ELSE SELECT 0 AS res;

funciona tão bem quanto

IF OBJECT_ID (N'db2.schema.table1', N'U') IS NOT NULL 
   SELECT 1 AS res ELSE SELECT 0 AS res;

Edição do SQL SERVER 2016 :

A partir de 2016, a Microsoft simplificou a capacidade de verificar objetos inexistentes antes da remoção, adicionando as if existspalavras-chave às dropinstruções. Por exemplo,

drop table if exists mytablename

fará o mesmo que OBJECT_ID/ INFORMATION_SCHEMAwrappers, em 1 linha de código.

https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/

iliketocode
fonte
25
IF OBJECT_ID('mytablename') IS NOT NULL 
sansalk
fonte
13

O uso do Esquema de Informação é a maneira padrão do SQL, por isso deve ser usado por todos os bancos de dados que o suportam.

Vinko Vrsalovic
fonte
12
Isso deveria ter sido um comentário.
underscore_d
3
Essa resposta precisa ser aprimorada.
precisa saber é
11
IF EXISTS 
(
    SELECT   * 
    FROM     sys.objects 
    WHERE    object_id = OBJECT_ID(N'[dbo].[Mapping_APCToFANavigator]') 
             AND 
             type in (N'U')
)
BEGIN

    -- Do whatever you need to here.

END

Aqui no código acima, o nome da tabela é Mapping_APCToFANavigator.

dilip kumar singh
fonte
2
Se você código postal, amostras de XML ou de dados, por favor destacar as linhas no editor de texto e clique no botão "código de amostras" ( { }) na barra de ferramentas do editor de bem formato e sintaxe destacá-lo!
marc_s
1
Observe que o acesso às tabelas do sistema pode ser descontinuado na versão futura do SQL Server. Use as exibições de esquema.
Olivier Jacot-Descombes
10

Se você precisar trabalhar em bancos de dados diferentes:

DECLARE @Catalog VARCHAR(255)
SET @Catalog = 'MyDatabase'

DECLARE @Schema VARCHAR(255)
SET @Schema = 'dbo'

DECLARE @Table VARCHAR(255)
SET @Table = 'MyTable'

IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES   
    WHERE TABLE_CATALOG = @Catalog 
      AND TABLE_SCHEMA = @Schema 
      AND TABLE_NAME = @Table))
BEGIN
   --do stuff
END
Even Mien
fonte
1
Você tem certeza? O esquema de informações na minha caixa de 2005 retorna apenas o catálogo atual.
quillbreaker
8

Sei que é uma pergunta antiga, mas encontrei essa possibilidade se você planeja chamá-la com frequência.

create procedure Table_Exists
@tbl varchar(50)
as
return (select count(*) from sysobjects where type = 'U' and name = @tbl)
go
dko
fonte
9
-1. Inútil ter um procedimento para isso, pois é tanto código chamar e consumir o retorno quanto simplesmente fazer a seleção. Não deve usar o sysnametipo de dados varchar(50). Não deve usar a sysobjectsexibição obsoleta e não leva em conta o esquema.
Martin Smith
6

Você pode usar o código abaixo

IF (OBJECT_ID('TableName') IS NOT NULL )
BEGIN
  PRINT 'Table Exists'
END
ELSE
BEGIN 
  PRINT 'Table NOT Exists'
END

Ou

IF (EXISTS (SELECT * FROM sys.tables WHERE [name] = 'TableName'))
BEGIN
  PRINT 'Table Exists'
END
ELSE
BEGIN 
  PRINT 'Table NOT Exists'
END
Reza Jenabi
fonte
5

Apenas adicionando aqui, para o benefício de desenvolvedores e colegas DBAs

um script que recebe @Tablename como parâmetro

(que pode ou não conter o nome do esquema) e retorna as informações abaixo se a tabela de esquema existir:

the_name                object_id   the_schema  the_table       the_type
[Facts].[FactBackOrder] 758293761   Facts       FactBackOrder   Table

Eu produzi esse script para ser usado dentro de outros scripts toda vez que preciso testar se uma tabela ou exibição existe ou não e, quando existir, faça com que seu object_id seja usado para outros fins.

Isso gera um erro quando você passa uma string vazia, nome de esquema errado ou nome de tabela incorreto.

isso pode estar dentro de um procedimento e retornar -1 por exemplo.

Como exemplo, eu tenho uma tabela chamada "Facts.FactBackOrder" em um dos meus bancos de dados do Data Warehouse.

Foi assim que consegui isso:

PRINT 'THE SERVER IS ' + @@SERVERNAME
--select db_name()
PRINT 'THE DATABASE IS ' + db_NAME() 
PRINT ''
GO

SET NOCOUNT ON
GO

--===================================================================================
-- @TableName is the parameter
-- the object we want to deal with (it might be an indexed view or a table)
-- the schema might or might not be specified
-- when not specified it is DBO
--===================================================================================

DECLARE @TableName SYSNAME

SELECT @TableName = 'Facts.FactBackOrder'
--===================================================================================
--===================================================================================
DECLARE @Schema SYSNAME
DECLARE @I INT
DECLARE @Z INT 

SELECT @TableName = LTRIM(RTRIM(@TableName))
SELECT @Z = LEN(@TableName)

IF (@Z = 0) BEGIN

            RAISERROR('Invalid @Tablename passed.',16,1)

END 

SELECT @I = CHARINDEX('.',@TableName )
--SELECT @TableName ,@I

IF @I > 0 BEGIN

        --===================================================================================
        -- a schema and table name have been passed
        -- example Facts.FactBackOrder 
        -- @Schema = Fact
        -- @TableName = FactBackOrder
        --===================================================================================

   SELECT @Schema    = SUBSTRING(@TABLENAME,1,@I-1)
   SELECT @TableName = SUBSTRING(@TABLENAME,@I+1,@Z-@I)



END
ELSE BEGIN

        --===================================================================================
        -- just a table name have been passed
        -- so the schema will be dbo
        -- example Orders
        -- @Schema = dbo
        -- @TableName = Orders
        --===================================================================================

   SELECT @Schema    = 'DBO'     


END

        --===================================================================================
        -- Check whether the @SchemaName is valid in the current database
        --===================================================================================

IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.SCHEMATA K WHERE K.[SCHEMA_NAME] = @Schema ) BEGIN

            RAISERROR('Invalid Schema Name.',16,1)

END 

--SELECT @Schema  as [@Schema]
--      ,@TableName as [@TableName]


DECLARE @R1 TABLE (

   THE_NAME SYSNAME
  ,THE_SCHEMA SYSNAME
  ,THE_TABLE SYSNAME
  ,OBJECT_ID INT
  ,THE_TYPE SYSNAME
  ,PRIMARY KEY CLUSTERED (THE_SCHEMA,THE_NAME)

)

;WITH RADHE_01 AS (
SELECT QUOTENAME(SCHEMA_NAME(O.schema_id)) + '.' + QUOTENAME(O.NAME) AS [the_name]
      ,the_schema=SCHEMA_NAME(O.schema_id)
      ,the_table=O.NAME
      ,object_id =o.object_id 
      ,[the_type]= CASE WHEN O.TYPE = 'U' THEN 'Table' ELSE 'View' END 
from sys.objects O
where O.is_ms_shipped = 0
AND O.TYPE IN ('U','V')
)
INSERT INTO @R1 (
   THE_NAME 
  ,THE_SCHEMA 
  ,THE_TABLE 
  ,OBJECT_ID
  ,THE_TYPE 
)
SELECT  the_name
       ,the_schema
       ,the_table
       ,object_id
       ,the_type
FROM RADHE_01
WHERE the_schema = @Schema 
  AND the_table  = @TableName

IF (@@ROWCOUNT = 0) BEGIN 

             RAISERROR('Invalid Table Name.',16,1)

END 
ELSE BEGIN

    SELECT     THE_NAME 
              ,THE_SCHEMA 
              ,THE_TABLE 
              ,OBJECT_ID
              ,THE_TYPE 

    FROM @R1

END 
Marcello Miorelli
fonte
Existem muitas suposições no seu script. Por exemplo, eu poderia facilmente criar uma tabela chamada dbo.[hello.world ]e o script não a encontraria por vários motivos. Dito isto, é improvável que alguém queira criar essa tabela, mas ainda assim. De qualquer forma, sua THE_NAMEcoluna é definida como sysname', yet you try to squeeze 2 colunas sysname` e um ponto ( .), todos envoltos entre colchetes ali ... aquele está fadado a falhar algum dia!
Der
@deroby Concordo que sysname não é o melhor tipo de dados a ser usado, mas o script está em execução há muito tempo sem erros, eu gastaria tempo apenas se encontrar uma situação razoável em que não funcione. Melhor ainda, você pega esse código, aprimora-o e publica-o aqui como resposta e eu testarei, se funcionar, eu votarei sua resposta.
Marcello Miorelli
5

No SQL Server 2000, você pode tentar:

IF EXISTS(SELECT 1 FROM sysobjects WHERE type = 'U' and name = 'MYTABLENAME')
BEGIN
   SELECT 1 AS 'res' 
END
dipi evil
fonte
3
IF EXISTS 
(
    SELECT  * 

    FROM    INFORMATION_SCHEMA.TABLES 

    WHERE   TABLE_SCHEMA = 'PutSchemaHere'     
            AND  
            TABLE_NAME   = 'PutTableNameHere'
)
Moccassin
fonte
2

Algo importante a saber para quem ainda não encontrou sua solução: SQL server! = MYSQL . Se você quiser fazer isso com o MYSQL , é bastante simples

    $sql = "SELECT 1 FROM `db_name`.`table_name` LIMIT 1;";
    $result = mysql_query($sql);
    if( $result == false )
        echo "table DOES NOT EXIST";
    else
        echo "table exists";

Postando isso aqui porque é o principal sucesso no Google.

phil294
fonte
4
-1 porque o OP está solicitando precisamente uma solução do SQL Server para o problema, não a solução do MySQL. Ele escreveu sobre o MySQL porque sabia a solução nesse DBMS e queria o mesmo resultado no SQL Server. Além disso, sua resposta nem sequer é uma consulta do MySQL, mas um código PHP que funciona com o MySQL.
mordack550
1
@ mordack550, concordo com Blauhirn. Ele tem razão. Este é o principal hit do Google para descobrir se existe uma tabela no SQL. Ele tem boas intenções e suas informações são úteis. +1
Mark
É lamentável que a Microsoft tenha o hábito de tentar adotar / estender / extinguir padrões e padrões comuns como o SQL. Eu realmente gostaria que eles tivessem dado um nome próprio à implementação de um servidor SQL para que as pessoas pudessem identificar referências específicas ao seu produto sem ambiguidade.
Ps250 psaxton #
2
IF EXISTS (   SELECT * FROM   dbo.sysobjects WHERE  id = OBJECT_ID(N'dbo.TableName') AND OBJECTPROPERTY(id, N'IsUserTable') = 1 )
BEGIN
  SELECT * FROM dbo.TableName;
END
GO
Krishnaraj Barvathaya
fonte
2

Você pode usar isto:

     IF OBJECT_ID (N'dbo.T', N'U') IS NOT NULL 
        BEGIN 
            print 'deleted table';
            drop table t 
        END
     else 
        begin 
            print 'table not found' 
        end

 Create table t (id int identity(1,1) not null, name varchar(30) not null, lastname varchar(25) null)
 insert into t( name, lastname) values('john','doe');
 insert into t( name, lastname) values('rose',NULL);

 Select * from t
1   john    doe
2   rose    NULL

 -- clean
 drop table t
BTE
fonte
1
select name from SysObjects where xType='U' and name like '%xxx%' order by name
MarceloMadnezz
fonte
1

- - cria procedimento para verificar se existe uma tabela


DELIMITER $$

DROP PROCEDURE IF EXISTS `checkIfTableExists`;

CREATE PROCEDURE checkIfTableExists(
    IN databaseName CHAR(255),
    IN tableName CHAR(255),
    OUT boolExistsOrNot CHAR(40)
)

  BEGIN
      SELECT count(*) INTO boolExistsOrNot FROM information_schema.TABLES
      WHERE (TABLE_SCHEMA = databaseName)
      AND (TABLE_NAME = tableName);
  END $$

DELIMITER ;

- - como usar: verifique se existem migrações de tabela


 CALL checkIfTableExists('muDbName', 'migrations', @output);
Mathieu Dierckx
fonte
1
IF EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE 
TABLE_CATALOG = 'Database Name' and
TABLE_NAME = 'Table Name' and 
TABLE_SCHEMA = 'Schema Name') -- Database and Schema name in where statement can be deleted

BEGIN
--TABLE EXISTS
END

ELSE BEGIN
--TABLE DOES NOT EXISTS
END
Mohamad Reza Shahrestani
fonte
1

Estou tomando aqui criando uma visão como exemplo .

Como os comandos ALTER / CREATE não podem estar dentro dos blocos BEGIN / END. Você precisa testar a existência e descartá-la antes de criar

IF Object_ID('TestView') IS NOT NULL
DROP VIEW TestView

GO

CREATE VIEW TestView
   as
   . . .

GO

Se você está preocupado com a perda de permissões, é possível criar um script para as instruções GRANT e executá-las novamente no final.

Você pode agrupar a criação / alteração em uma string e executar um EXEC - que pode ficar feio para visualizações grandes

DECLARE @SQL as varchar(4000)

-- set to body of view
SET @SQL = 'SELECT X, Y, Z FROM TABLE' 

IF Object_ID('TestView') IS NULL
    SET @SQL = 'CREATE VIEW TestView AS ' + @SQL
ELSE    
    SET @SQL = 'ALTER VIEW TestView AS ' + @SQL
Kelum Sampath Edirisinghe
fonte
0

Se alguém estiver tentando fazer a mesma coisa no linq to sql (ou especialmente no linqpad), ative a opção para incluir tabelas e visualizações do sistema e faça este código:

let oSchema = sys.Schemas.FirstOrDefault(s=>s.Name==a.schema )
where oSchema !=null
let o=oSchema!=null?sys.Objects.FirstOrDefault (o => o.Name==a.item && o.Schema_id==oSchema.Schema_id):null
where o!=null

dado que você tem um objeto com o nome em uma propriedade chamada item e o esquema em uma propriedade chamada schema em que o nome da variável de origem é a

Maslow
fonte
0

Se essa for a discussão 'definitiva', deve-se notar que o script de Larry Leonard pode consultar um servidor remoto e também se os servidores estão vinculados.

if exists (select * from REMOTE_SERVER.MyOtherDatabase.sys.tables where name = 'MyTable')
    print 'Exists'
user3651072
fonte
Talvez seja mais adequado adicionar isso como um comentário à resposta de Leonards ou talvez como uma edição?
EWit
0

Eu tive alguns problemas com a seleção de INFORMATIONAL_SCHEME e OBJECT_ID. Não sei se é um problema do driver ODBC ou algo assim. As consultas do SQL Management Studio, ambas, foram boas.

Aqui está a solução:

SELECT COUNT(*) FROM <yourTableNameHere>

Portanto, se a consulta falhar, provavelmente não existe uma tabela no banco de dados (ou você não tem permissões de acesso).

A verificação é feita comparando o valor (número inteiro no meu caso) retornado pelo executor SQL que lida com o driver ODBC.

if (sqlexec(conectionHandle, 'SELECT COUNT(*) FROM myTable') == -1) {
  // myTable doesn't exist..
}
Michael Quad
fonte
Falha com que saída?
wscourge 22/03/19
@ wscourge, consulta SQL falhou ou algo parecido. Acabei de verificar o valor de retorno da função executora.
Michael Quad
Adicione-o à sua resposta
wscourge 22/03/19
0

Há mais uma opção para verificar se a tabela existe nos bancos de dados

IF EXISTS(SELECT 1 FROM [change-to-your-database].SYS.TABLES WHERE NAME = 'change-to-your-table-name')
BEGIN
    -- do whatever you want
END
Jitan Gupta
fonte
-1

Execute esta consulta para verificar se a tabela existe no banco de dados:

IF(SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'YourTableName') IS NOT NULL
PRINT 'Table Exists';
S Krishna
fonte
-6

considere em um banco de dados que você tem uma tabela t1. você deseja executar o script em outro banco de dados como - se t1 existir, não faça mais nada criar t1. Para fazer isso, abra o visual studio e faça o seguinte:

Clique com o botão direito do mouse em t1, depois em Tabela de scripts como, em DROP e Create To, em seguida, Novo Query Editor

você encontrará sua consulta desejada. Mas antes de executar esse script, não se esqueça de comentar a instrução drop na consulta, pois você não deseja criar uma nova, se já houver uma.

obrigado

convocar
fonte
No SSMS 2012, ele não executa mais a verificação se existe, se já o fez (não me lembro como as versões anteriores geraram o script acima). Talvez você esteja enganado com a maneira como outras ferramentas de banco de dados são objetos de tabela de script?
Ivaylo Slavov
O SSMS executará a verificação se existe, se você solicitar. Ferramentas> Opções> Objeto SQL Server Explorer> Scripting> "Opções de objeto script": "Check for objeto existência" = True
Seann Alexander