#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. Пожалуйста, обратите внимание, что лучше всего всегда называть свои ограничения.