Проверка типа столбца инструкции if

#tsql

#tsql

Вопрос:

Я хочу добавить int первичный ключ, если столбец Id является nvarchar. У меня есть смутное представление о том, как это сделать:

 DECLARE @columnType ... = SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 
 TABLE_NAME = 'TempTable' AND 
 COLUMN_NAME = 'Id';
IF ISNUMERIC(@columnType)<>1
    ALTER TABLE TempTable ALTER COLUMN Id int IDENTITY(1,1), ADD PRIMARY KEY (Id);
ELSE
    ALTER TABLE TempTable ADD PRIMARY KEY (Id);
  

Я не знаю, как заставить это работать, но я думаю, что я довольно близок.

Комментарии:

1. @columnType будет содержать типы данных SQL Server, такие как INT, DECIMAL, VARCHAR. Так что да, довольно близко.

Ответ №1:

Мне удалось сделать то, что я хотел. Может быть, кто-то выиграет от этого:

 IF 'Int' in (SELECT DATA_TYPE 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE 
    TABLE_NAME = 'TempTable' AND 
    COLUMN_NAME = 'Id')
    BEGIN
        ALTER TABLE TempTable ADD PRIMARY KEY (Id)
    END
ELSE
    BEGIN
        ALTER TABLE TempTable ADD Idd int IDENTITY (1,1)
        ALTER TABLE TempTable ADD PRIMARY KEY (Idd)
    END
GO
  

В основном он проверяет, имеет ли столбец тип INT если да, он добавляет первичный ключ в столбец Id. Если это не так, он создает новый столбец Idd и превращает его в первичный ключ int.

Довольно специфическая проблема, может быть, кто-то воспользуется моими мучениями.

РЕДАКТИРОВАТЬ: что-то не так с проверкой, находится ли Int в выбранном типе.

Комментарии:

1. Пожалуйста, обратите внимание, что лучше всего всегда называть свои ограничения.