Вопрос:

Создание таблицы T-SQL в источнике

sql-server create-table

33 просмотра

1 ответ

548 Репутация автора

Я начинаю новую базу данных SQL Server Azure с нуля. Я хочу установить строгий контроль исходного кода, поэтому я хочу быть осторожным при создании всех моих таблиц.

Каков наилучший способ проверить, существует ли таблица, и выполнить мою CREATE TABLEинструкцию, только если она еще не существует? Я работаю с передачей динамического SQL в хранимую процедуру, которая проверяет существование таблиц, но это так ограничивает. Там должен быть предпочтительный способ сделать это там. Я имею в виду, что я мог бы предварять каждый запрос:

IF NOT EXISTS (SELECT * 
               FROM sys.objects
               WHERE object_id = OBJECT_ID(N'[dbo].j[myTable]') AND type in(N'U'))
BEGIN
    CREATE TABLE myTable(....)
END

Но это довольно повторяющееся.

Автор: Jamie Marshall Источник Размещён: 09.11.2017 12:01

Ответы (1)


0 плюса

606789 Репутация автора

Проще говоря:

IF NOT EXISTS (SELECT * FROM sys.tables WHERE Name = N'myTable') 
   CREATE TABLE myTable .......

Идея: использовать более целенаправленный sys.tables вид каталога, а не всеохватывающий sys.objects- тогда вы не должны помнить те , а неинтуитивные typeзначения ..... - но да, что это самый безопасный способ сделать этот вид кода.

Начиная с SQL Server 2016, вы также можете использовать

DROP TABLE IF EXISTS myTable;
CREATE TABLE myTable .......

команда (новая - см. здесь: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/ )

Автор: marc_s Размещён: 09.11.2017 06:10
Вопросы из категории :
32x32