0

テーブル内のすべての列をループして、現在のサイズに基づいて各フィールドのサイズを増やす方法があるかどうか疑問に思っています。基本的に、現在フィールド サイズが 1000 文字未満のフィールドを 1000 文字に設定する必要があります。私は次のようなことができます

ALTER TABLE tableName ALTER COLUMN nvarchar(1000)

変更したいフィールドごとに変更しますが、何百ものフィールドがあり、可能であればプログラムで実行したいと考えています。ありがとう。

4

2 に答える 2

1

名前付きテーブルのすべての列をループするコードを次に示します。詳細を選択するだけです。ループで行うことを記入する必要があります。

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」です。

また、変更によって列の序数が変更されないことも想定していますが、変更された場合は、別の方法で選択できます。

于 2011-02-22T16:31:25.487 に答える
1

これを使用して、すべての 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

システムビューを使用すると簡単です。

于 2011-02-22T16:56:20.980 に答える