Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

2 начина за създаване на таблица, ако тя не съществува в SQL Server

T-SQL не включва IF NOT EXISTS клауза с нейния CREATE TABLE изявление, както правят някои други СУБД.

Следователно, ако искаме да проверим съществуването на таблицата, преди да я създадем в SQL Server, трябва да използваме други методи.

Опция 1:Проверете идентификатора на обекта

В SQL Server можем да използваме OBJECT_ID() функция за проверка за съществуването на таблицата, преди да се опитаме да я създадем:

IF OBJECT_ID(N'dbo.t1', N'U') IS NULL
CREATE TABLE dbo.t1 (
    c1 int,
    c2 varchar(10)
    );
GO

Горният пример проверява идентификатора на обекта за dbo.t1 таблица.

Вторият аргумент на OBJECT_ID() определя типа обект, който търсим. В този случай използваме U , което е за „дефинирана от потребителя таблица“.

OBJECT_ID() връща идентификационния номер на обект от база данни на обект с обхват на схема. Ако обектът не съществува или ако нямате достъп до него, функцията връща NULL. Следователно можем да проверим за стойност NULL и да създадем таблицата само ако тази функция връща NULL.

Можем да използваме OBJECT_ID() функция за проверка на идентификатора на обекта на таблицата, след като бъде създадена:

SELECT OBJECT_ID(N'dbo.t1', N'U');

Примерен резултат:

354100302

Ако искаме малко повече информация, можем да направим нещо подобно:

sp_tables 't1';

Резултат:

+-------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------------+---------------+--------------+--------------+-----------|
| KrankyKranes      | dbo           | t1           | TABLE        | NULL      |
+-------------------+---------------+--------------+--------------+-----------+

Тук KrankyKranes е базата данни, в която създадох таблицата.

Има много други начини да разгледате съществуващите таблици. Вижте 6 начина да проверите дали таблица съществува в SQL Server за примери.

Опция 2:Заявка за sys.tables

Друг начин да проверите дали таблица вече съществува е да потърсите sys.tables изглед на системния каталог.

Пример:

IF NOT EXISTS (
    SELECT * FROM sys.tables t 
    JOIN sys.schemas s ON (t.schema_id = s.schema_id) 
    WHERE s.name = 'dbo' AND t.name = 't1') 	
    CREATE TABLE dbo.t1 (
        c1 int,
        c2 varchar(10)
        );

Това прави нещо подобно на предишния пример; той проверява за съществуването на таблицата и я създава само ако не съществува.

Независимо от използвания метод за проверка на съществуването на таблицата, командата завършва успешно, независимо дали таблицата съществува или не.

Така че получаваме следния изход от двата метода:

Commands completed successfully.

Получавам това съобщение дали таблицата вече съществува или не.

Ако таблицата вече съществува, но не проверяваме за съществуването на таблицата, получаваме грешка като тази:

Msg 2714, Level 16, State 6, Line 1
There is already an object named 't1' in the database.

Важно е да се отбележи, че само защото таблица с това име вече съществува в базата данни, това не означава, че има правилната дефиниция. Горните методи просто проверяват за таблицата по име и схема.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Отменете оптимизатора на заявки за вашите T-SQL присъединявания с FORCEPLAN

  2. Промяна на колона:null на not null

  3. Променете типа на колона с числа от varchar на int

  4. Ред, разделен със запетая, с клауза Group By

  5. Топ 10 често задавани въпроси относно мониторинга на производителността на SQL Server