T-SQL Проверьте, существует ли таблица в схеме - PullRequest
0 голосов
/ 08 февраля 2019

До сих пор я использовал приведенный ниже формат для создания / обновления таблиц

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'table_name' AND type = 'U') 
DROP TABLE [dbo].[table_name]
GO
CREATE TABLE [dbo].[table_name]()
GO

Но недавно я столкнулся со случаем, когда две схемы имеют таблицу с одинаковым именем.Как я могу проверить, существует ли таблица в определенной схеме?Это только часть SELECT 1 FROM sysobjects WHERE name = 'table_name' AND type = 'U', которая нуждается в исправлении, остальное я изменил на:

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'table_name' AND type = 'U') 
DROP TABLE [schema_name].[table_name]
GO
CREATE TABLE [schema_name].[table_name]()
GO

Моя текущая версия сервера 2008R2, поэтому я бы предпочел ответы, которые также работают для этой версии.У меня есть много других проверок, сделанных таким образом, поэтому я не хочу полностью менять этот шаблон.

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

TRY

IF OBJECT_ID('[schema_name].[table_name]') IS NOT NULL
        DROP TABLE [schema_name].[table_name]
    GO
0 голосов
/ 08 февраля 2019

Вы также можете использовать объект schemas.Например:

IF EXISTS (SELECT 1
           FROM sys.tables t
                JOIN sys.schemas s ON t.schema_id = s.schema_id
           WHERE s.[name] = N'schema_name'
             AND t.name = N'table_name'
             AND t.type = 'U')
    DROP TABLE [schema_name].[table_name];
GO
0 голосов
/ 08 февраля 2019

Используйте этот синтаксис.

DROP TABLE IF EXISTS [schema_name].[table_name]

...