SQL Server - Проверить столбец, если существует >> переименовать и изменить тип - PullRequest
0 голосов
/ 10 июня 2018

SQL Server:

  • Проверить столбец, если существует, когда

  • Если True: (Изменить / Изменить) column_nameи dataType

  • Если False: Создать

Имя схемы: Настройка

Код:

IF EXISTS (SELECT 1 FROM sys.columns  
           WHERE Name = N'bitIntialBalance' 
             AND Object_ID = Object_ID(N'Setup.LeaveVacationsSubType'))
BEGIN
    ALTER TABLE [Setup].[LeaveVacationsSubType] 
        ALTER COLUMN intIntialBalance INT NULL; 

    EXEC sp_RENAME 'Setup.LeaveVacationsSubType.bitIntialBalance', 'intIntialBalance', 'COLUMN';
    --ALTER TABLE [Setup].[LeaveVacationsSubType] MODIFY [intIntialBalance] INT; not working
END
GO

IF NOT EXISTS(SELECT 1 FROM sys.columns  
              WHERE Name = N'intIntialBalance' 
                AND Object_ID = Object_ID(N'Setup.LeaveVacationsSubType'))
BEGIN
    ALTER TABLE [Setup].[LeaveVacationsSubType] 
        ADD intIntialBalance INT NULL; 
END
GO

1 Ответ

0 голосов
/ 10 июня 2018

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

Один из способов обойти эту проблему - сделать все эти операторы динамическими, что-то вроде этого:

execute ('ALTER TABLE [Setup].[LeaveVacationsSubType] MODIFY [intIntialBalance] INT')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...