У меня есть столбец ReferenceID varchar(6) в более чем 80 различных таблицах. Мне нужно расширить это до varchar (8) по всей базе данных после изменения, внесенного правительственной организацией, которая назначает идентификаторы.
Я надеялся объявить курсор для получения имен таблиц следующим образом:
DECLARE @TableName AS VARCHAR(200)
DECLARE TableCursor CURSOR LOCAL READ_ONLY FOR
SELECT t.name AS TableName
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name = 'ReferenceID'
OPEN TableCursor
FETCH NEXT FROM TableCursor
INTO @TableName
а затем отредактировать тип следующим образом:
ALTER TABLE @TableName ALTER COLUMN ReferenceID VARCHAR(8)
Это не удается, потому что столбец является частью первичного ключа в некоторых таблицах (и столбцы, включенные в ПК, варьируются от таблицы к таблице).
Я действительно не хочу вручную удалять и заново создавать каждый PK для каждой таблицы.
В курсоре есть способ либо отключить ПК перед изменением типа данных, а затем снова включить его, либо удалить и воссоздать ПК по обе стороны от изменения типа данных, имея в виду, что ПК будет зависеть от какую таблицу мы сейчас просматриваем?