我想知道是否有一种方法可以遍历表中的所有列并根据当前大小增加每个字段的大小。基本上,我需要将当前字段大小低于 1000 个字符的任何字段设置为 1000 个字符。我可以做类似的事情
ALTER TABLE tableName ALTER COLUMN nvarchar(1000)
对于我想要更改的每个字段,但有数百个字段,如果可能的话,我想以编程方式进行。谢谢。
我想知道是否有一种方法可以遍历表中的所有列并根据当前大小增加每个字段的大小。基本上,我需要将当前字段大小低于 1000 个字符的任何字段设置为 1000 个字符。我可以做类似的事情
ALTER TABLE tableName ALTER COLUMN nvarchar(1000)
对于我想要更改的每个字段,但有数百个字段,如果可能的话,我想以编程方式进行。谢谢。
这是一些循环遍历命名表的所有列的代码。它只是选择他们的详细信息;你需要填写你在循环中所做的事情。
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”
我想我也在假设您所做的更改不会改变列序号,但如果他们这样做了,您可以以另一种方式选择它们。
使用它来生成所有的 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
使用系统视图更容易。