Изменить тип данных столбца с первичным ключом

У меня есть столбец 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 для каждой таблицы.

В курсоре есть способ либо отключить ПК перед изменением типа данных, а затем снова включить его, либо удалить и воссоздать ПК по обе стороны от изменения типа данных, имея в виду, что ПК будет зависеть от какую таблицу мы сейчас просматриваем?

9
задан Neil 20 June 2012 в 11:30
поделиться