Controlla se la tabella esiste in SQL Server


1143

Vorrei che questa fosse la discussione finale su come verificare se esiste una tabella in SQL Server 2000/2005 usando le istruzioni SQL.

Quando cerchi Google per la risposta, ottieni così tante risposte diverse. Esiste un modo ufficiale / retroattivo e compatibile per farlo?

Ecco due possibili modi per farlo. Quale tra i due è il modo migliore / standard di farlo?

Primo modo:

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;

Secondo modo:

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

MySQL fornisce il semplice

SHOW TABLES LIKE '%tablename%'; 

dichiarazione. Sto cercando qualcosa di simile.


1
Perché è meglio usare INFORMATION_SCHEMA.TABLES invece di sys.tables quindi filtrare con il nome o aggiungere un controllo del valore type_desc?
DanteTheSmith,

Risposte:


1332

Per domande come questa è sempre meglio usare una INFORMATION_SCHEMAvista. Queste visualizzazioni sono (principalmente) standard in molti database diversi e raramente cambiano da versione a versione.

Per verificare l'esistenza di una tabella, utilizzare:

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND  TABLE_NAME = 'TheTable'))
BEGIN
    --Do Stuff
END

12
Funziona alla grande! In T-SQL (in risposta al poster originale), tuttavia, è TABLE_SCHEMA, non SCHEMA_NAME. Grazie per il consiglio.
Nicholas Piasecki,

10
Dato che il solo nome di un oggetto (ovvero senza uno schema) non è garantito per essere univoco, non esiste un modo sicuro al 100% per farlo. Se stai lavorando con un DB che non ha conflitti di denominazione tra gli schemi, semplicemente omettendo "TABLE_SCHEMA = 'TheSchema'" funzionerà perfettamente.
akmad

26
Per verificare la presenza di una tabella temporanea, è necessario eseguire una query sul database tempdb e utilizzare un operatore LIKE per il nome della tabellaSELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'TheSchema' AND TABLE_NAME LIKE '#TheTable%'
Vigeant Pierre-Alain,

4
Una risposta di seguito che utilizza la funzione OBJECT_ID funziona correttamente per quanto riguarda le tabelle delle temp per connessione - stackoverflow.com/a/2155299/16147
Rich Rousseau

4
Il compilatore di query SQL @akmad controllerà la tabella prima di eseguire la query e fallirà anche prima di iniziare.
Marc K,

278

Si noti inoltre che se per qualsiasi motivo è necessario verificare la presenza di una tabella temporanea, è possibile:

if OBJECT_ID('tempdb..#test') is not null
 --- temp table exists

10
L'uso di questo metodo sembra rispettare la natura per connessione delle tabelle temporanee. La query INFO_SCHEMA pubblicata in precedenza restituirà le righe indipendentemente dalla connessione che ha creato la tabella.
Rich Rousseau,

238

Usiamo sempre lo OBJECT_IDstile per tutto il tempo che ricordo

IF OBJECT_ID('*objectName*', 'U') IS NOT NULL 

16
Credo che questo sarebbe veloce, anche se non molto portatile. Le viste dello schema di informazioni sono garantite su qualsiasi DBRMS che supporti lo standard. Inoltre, OBJECT_ID non garantisce che l'oggetto sia una tabella.
Joe Pineda,

9
Grazie Joe, mi chiedevo perché avresti usato OBJECT_ID vs INFORMATION_SCHEMA.TABLES vs sys.tables. Sottolineando che INFORMATION_SCHEMA fa parte di uno standard praticamente risponde a questa domanda. A proposito, è divertente, uno dei nostri esperti di database che stavo per porre questa domanda ha lo stesso cognome come te, deve essere un buon cognome per i database.
Apeiron,

24
@JoePineda: in questo caso verrà utilizzato OBJECT_ID('TableName', 'U')per garantire che l'oggetto sia una tabella.
Allon Guralnek,

1
@AllonGuralnek quindi, invece di seguire uno standard semplice e portatile, aggiungere un ulteriore pezzo di informazioni criptiche?
definisce

22
@DustinFineout: la domanda è stata taggata tsql , quindi la portabilità non si applica tanto. In generale ho incontrato pochissime basi di codici portatili e se la succintualità è valutata, allora è meglio che scriva IF EXISTSripetutamente quella query dalla risposta accettata. Inoltre, tutto è criptico fino a quando non leggi la documentazione, specialmente in T-SQL (o qualsiasi altra variante, davvero).
Allon Guralnek,

132

Si prega di consultare gli approcci di seguito,

Approccio 1: utilizzo della vista INFORMATION_SCHEMA.TABLES

Siamo in grado di scrivere una query come di seguito per verificare se esiste una tabella clienti nel database corrente.

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

Approccio 2: utilizzo della funzione OBJECT_ID ()

Possiamo usare la funzione OBJECT_ID () come sotto per verificare se esiste una tabella clienti nel database corrente.

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

Approccio 3: utilizzo di sys.Objects Catalog View

È possibile utilizzare la vista del catalogo Sys.Objects per verificare l'esistenza della tabella come mostrato di seguito:

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

Approccio 4: utilizzo di sys.Tables Visualizzazione catalogo

Possiamo usare la vista del catalogo Sys.Tables per verificare l'esistenza della tabella come mostrato di seguito:

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

Approccio 5: evitare l'uso della tabella di sistema sys.sysobjects

Dovremmo evitare di utilizzare direttamente la tabella di sistema sys.sysobjects, l'accesso diretto ad esso sarà deprecato in alcune versioni future del server SQL. Come da collegamento Microsoft BOL, Microsoft suggerisce di utilizzare direttamente le viste del catalogo sys.objects / sys.tables anziché la tabella di sistema sys.sysobjects.

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

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


37

Alla ricerca di una tabella su un database diverso:

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

26

Volevo solo menzionare una situazione in cui sarebbe probabilmente un po 'più facile usare il OBJECT_IDmetodo. Le INFORMATION_SCHEMAviste sono oggetti in ciascun database

Le viste dello schema di informazioni sono definite in uno schema speciale denominato INFORMATION_SCHEMA. Questo schema è contenuto in ciascun database.

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

Pertanto tutte le tabelle a cui accedi utilizzando

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;

rifletterà solo ciò che è dentro [database]. Se si desidera verificare l' esistenza di tabelle in un altro database, senza modificarle dinamicamente [database]ogni volta, è OBJECT_IDpossibile farlo immediatamente. Ex-

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

funziona altrettanto bene

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

Modifica di SQL SERVER 2016 :

A partire dal 2016, Microsoft ha semplificato la possibilità di verificare la presenza di oggetti inesistenti prima della caduta, aggiungendo le if existsparole chiave alle dropistruzioni. Per esempio,

drop table if exists mytablename

farà la stessa cosa di OBJECT_ID/ INFORMATION_SCHEMAwrapper, in 1 riga di codice.

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



13

L'uso dello schema delle informazioni è il modo standard SQL per farlo, quindi dovrebbe essere utilizzato da tutti i database che lo supportano.


12
Questo avrebbe dovuto essere un commento.
underscore_d

3
Questa risposta necessita di miglioramenti.
rory.ap

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

Qui nel codice sopra, il nome della tabella è Mapping_APCToFANavigator.


2
Se si codice postale, campioni di XML o di dati, si prega di evidenziare quelle linee in editor di testo e fare clic sul pulsante "codice di campioni" ( { }) sulla barra degli strumenti Editor per ben formato e la sintassi evidenziarlo!
marc_s,

1
Si noti che l'accesso alle tabelle di sistema potrebbe essere interrotto nella versione futura di SQL Server. Utilizzare invece le viste dello schema.
Olivier Jacot-Descombes,

10

Se è necessario lavorare su database diversi:

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

1
Sei sicuro? Lo schema di informazioni sulla mia casella del 2005 restituisce solo il catalogo corrente.
Quillbreaker,

8

So che è una vecchia domanda, ma ho trovato questa possibilità se hai intenzione di chiamarla spesso.

create procedure Table_Exists
@tbl varchar(50)
as
return (select count(*) from sysobjects where type = 'U' and name = @tbl)
go

9
-1. Inutile avere una procedura per questo in quanto è tanto codice da chiamare e consumare il ritorno che semplicemente fare la selezione. Non utilizzare il sysnametipo di dati varchar(50). Non dovrebbe usare la sysobjectsvista obsoleta e non tiene conto dello schema.
Martin Smith,

6

Puoi usare il codice qui sotto

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

O

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

5

Basta aggiungere qui, a beneficio di sviluppatori e colleghi DBA

uno script che riceve @Tablename come parametro

(che può contenere o meno lo schema) e restituisce le informazioni seguenti se esiste schema.table:

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

Ho prodotto questo script per usarlo all'interno di altri script ogni volta che ho bisogno di verificare se esiste una tabella o una vista e, quando lo fa, ottengo il suo object_id per altri scopi.

Genera un errore quando si passa una stringa vuota, un nome di schema errato o un nome di tabella errato.

questo potrebbe essere all'interno di una procedura e restituire -1 per esempio.

Ad esempio, ho una tabella chiamata "Facts.FactBackOrder" in uno dei miei database di Data Warehouse.

Ecco come l'ho raggiunto:

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 

Ci sono molti presupposti nella tua sceneggiatura. Ad esempio, potrei facilmente craete una tabella chiamata dbo.[hello.world ]e lo script non la troverà per diversi motivi. Detto questo, è improbabile che qualcuno voglia creare un tavolo del genere, ma comunque. Ad ogni modo, la tua THE_NAMEcolonna è definita come sysname', yet you try to squeeze 2 colonne sysname` e un punto ( .), il tutto racchiuso tra parentesi quadre ... che un giorno è destinato a fallire!
derby il

@deroby Accetto che sysname non sia il miglior tipo di dati da utilizzare, ma lo script è in esecuzione da molto tempo senza errori, ci dedicherei solo se trovo una situazione ragionevole in cui non funziona. Ancora meglio, prendi questo codice, miglioralo e pubblicalo qui come risposta e lo testerò, se funziona, voterò la tua risposta.
Marcello Miorelli,

5

In SQL Server 2000 puoi provare:

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

3
IF EXISTS 
(
    SELECT  * 

    FROM    INFORMATION_SCHEMA.TABLES 

    WHERE   TABLE_SCHEMA = 'PutSchemaHere'     
            AND  
            TABLE_NAME   = 'PutTableNameHere'
)

2

Qualcosa di importante da sapere per chiunque non abbia ancora trovato la propria soluzione: SQL server! = MYSQL . Se vuoi farlo con MYSQL , è abbastanza semplice

    $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";

Pubblicando questo qui perché è il massimo successo su Google.


4
-1 perché l'OP richiede esattamente una soluzione SQL Server al problema, non quella di MySQL. Scrisse di MySQL perché conosceva la soluzione su quel DBMS e voleva lo stesso risultato su SQL Server. Inoltre la tua risposta non è nemmeno una query MySQL, ma un codice PHP che funziona con MySQL.
mordack550,

1
@ mordack550, sono d'accordo con Blauhirn. Ha ragione. Questo è il massimo successo su Google per scoprire se esiste una tabella in SQL. Le sue intenzioni sono buone e le sue informazioni sono utili. +1
Segna il

È un peccato che Microsoft abbia l'abitudine di provare ad abbracciare / estendere / estinguere standard e schemi comuni come SQL. Vorrei davvero che avessero dato alla loro implementazione di un server SQL un nome proprio in modo che le persone potessero identificare in modo inequivocabile i riferimenti specifici al loro prodotto.
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

2

Puoi usare questo:

     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

1
select name from SysObjects where xType='U' and name like '%xxx%' order by name

1

- - creare una procedura per verificare l'esistenza di una tabella


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 ;

- - come usare: controlla se esistono migrazioni di tabelle


 CALL checkIfTableExists('muDbName', 'migrations', @output);

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

1

sto prendendo qui la creazione di una vista come esempio .

Perché i comandi ALTER / CREATE non possono trovarsi all'interno dei blocchi BEGIN / END. Devi testare l'esistenza e rilasciarlo prima di fare una creazione

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

GO

CREATE VIEW TestView
   as
   . . .

GO

Se sei preoccupato per le autorizzazioni perse, puoi anche scrivere le istruzioni GRANT e rieseguire quelle alla fine.

Potresti avvolgere la creazione / modifica in una stringa e fare un EXEC - che potrebbe diventare brutto per le viste di grandi dimensioni

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

0

Se qualcuno sta provando a fare la stessa cosa in linq to sql (o in particolare linqpad), attiva l'opzione per includere tabelle e viste di sistema ed eseguire questo codice:

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

dato che hai un oggetto con il nome in una proprietà chiamata item e lo schema in una proprietà chiamata schema in cui il nome della variabile di origine è a


0

Se questa deve essere la discussione "definitiva", allora va notato che lo script di Larry Leonard può interrogare anche un server remoto se i server sono collegati.

if exists (select * from REMOTE_SERVER.MyOtherDatabase.sys.tables where name = 'MyTable')
    print 'Exists'

Forse è più adatto aggiungerlo come commento alla risposta di Leonards o forse come modifica?
EWit

0

Ho avuto dei problemi con la selezione tra INFORMATIONAL_SCHEME e OBJECT_ID. Non so se si tratta di un problema con il driver ODBC o qualcosa del genere. Le query di SQL Management Studio, entrambe, andavano bene.

Ecco la soluzione:

SELECT COUNT(*) FROM <yourTableNameHere>

Pertanto, se la query ha esito negativo, probabilmente non esiste una tabella di questo tipo nel database (o non si dispone delle autorizzazioni di accesso).

Il controllo viene eseguito confrontando il valore (intero nel mio caso) restituito dall'esecutore SQL che si occupa del driver ODBC.

if (sqlexec(conectionHandle, 'SELECT COUNT(*) FROM myTable') == -1) {
  // myTable doesn't exist..
}

Non riesce con quale output?
wscourge

@wscourge, query SQL non riuscita o qualcosa di simile. Controllo semplicemente il valore restituito dalla funzione di esecuzione.
Michael Quad,

Aggiungilo alla tua risposta
wscourge il

0

Esiste un'altra opzione per verificare se la tabella esiste nei database

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

-1

Eseguire questa query per verificare se la tabella esiste nel database:

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

-6

considera in un database che hai una tabella t1. si desidera eseguire script su altri database come - se esiste t1, non fare nient'altro creare t1. Per fare questo aprire Visual Studio ed effettuare le seguenti operazioni:

Fare clic con il tasto destro su t1, quindi su Tabella script come, quindi su DROP e Crea in, quindi su Nuovo editor di query

troverai la query desiderata. Ma prima di eseguire quello script non dimenticare di commentare l'istruzione drop nella query poiché non vuoi crearne uno nuovo se ce n'è già uno.

Grazie


In SSMS 2012 non esegue più il controllo if-esiste, se mai lo ha fatto (non ricordo come le versioni precedenti abbiano generato lo script sopra). Forse ti sbagli con il modo in cui altri strumenti db sono oggetti tabella scripting?
Ivaylo Slavov,

SSMS eseguirà il controllo if-have se lo chiedi. Strumenti> Opzioni> Esplora oggetti di SQL Server> Scripting> "Opzioni di scripting degli oggetti": "Verifica l'esistenza dell'oggetto" = Vero
Seann Alexander,
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.