SQL Server 2005 - T-SQL для увеличения размера поля на основе параметров - PullRequest
0 голосов
/ 22 февраля 2011

Мне интересно, есть ли способ перебрать все столбцы в таблице и увеличить размер каждого поля в зависимости от текущего размера. По сути, мне нужны любые поля, которые в настоящее время имеют размер поля менее 1000 символов, чтобы установить 1000 символов. Я могу сделать что-то вроде

ALTER TABLE tableName ALTER COLUMN nvarchar(1000)

для каждого поля, которое я хочу изменить, но есть сотни полей, и я хотел бы сделать это программно, если это возможно. Спасибо.

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Используйте это, чтобы сгенерировать все ваши ALTER TABLE

SELECT
    'ALTER TABLE ' +
        OBJECT_SCHEMA_NAME(c.object_id) + '.' + OBJECT_NAME(c.object_id) +
        ' ALTER COLUMN '+ C.name + ' ' + T.[name] + ' (1000) ' +
        CASE WHEN c.is_nullable = 0 THEN 'NOT' ELSE '' END + ' NULL'
FROM
    sys.columns C
    JOIN
    sys.types T ON C.system_type_id = T.system_type_id
WHERE
    T.[name] LIKE '%varchar' AND C.max_length < 1000
    AND
    OBJECTPROPERTYEX(c.object_id, 'IsMSShipped') = 0

С системными представлениями все проще.

1 голос
/ 22 февраля 2011

Вот некоторый код для циклического перебора всех столбцов именованной таблицы.Он просто выбирает их детали;вам нужно заполнить то, что вы делаете в цикле.

declare @tableName varchar(32)
select @tableName = 'tableName'

declare @i int 
select @i = count(*) from INFORMATION_SCHEMA.COLUMNS
 where Table_Name = @tableName 
while @i > 0 
begin   
  select * from INFORMATION_SCHEMA.COLUMNS where Table_Name = @tableName and Ordinal_Position = @i  
  select @i = @i-1 
end

Поля, которые вас заинтересуют в представлении INFORMATION_SCHEMA.COLUMNS, это 'DATA_TYPE' и 'CHARACTER_MAXIMUM_LENGTH'

Я полагаю, что я также предполагаю, что внесенные вами изменения не изменят порядковые номера столбцов, но если бы они были, вы могли бы выбрать их по-другому.

...