SQL Server 2005 - T-SQL для увеличения размера поля на основе параметров
Мне интересно, есть ли способ перебрать все столбцы в таблице и увеличить размер каждого поля в зависимости от текущего размера. По сути, мне нужны любые поля, которые в настоящее время имеют размер поля менее 1000 символов, чтобы установить 1000 символов. Я могу сделать что-то вроде
ALTER TABLE tableName ALTER COLUMN nvarchar(1000)
для каждого поля, которое я хочу изменить, но есть сотни полей, и я хотел бы сделать это программно, если это возможно. Благодарю.
2 ответа
Используйте это, чтобы сгенерировать все ваши 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
Это проще с системными представлениями.
Вот некоторый код для цикла по всем столбцам именованной таблицы. Он просто выбирает их детали; вам нужно заполнить то, что вы делаете в цикле.
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"
Я предполагаю, что я также делаю предположение, что изменения, которые вы делаете, не изменят порядковые номера столбцов, но если бы они сделали, вы могли бы выбрать их по-другому.