【问题标题】:SQL Server 2005 - T-SQL to increase field size based on parametersSQL Server 2005 - T-SQL 根据参数增加字段大小
【发布时间】:2011-02-22 16:13:28
【问题描述】:

我想知道是否有一种方法可以遍历表中的所有列并根据当前大小增加每个字段的大小。基本上,我需要将当前字段大小低于 1000 个字符的任何字段设置为 1000 个字符。我可以做类似的事情

ALTER TABLE tableName ALTER COLUMN nvarchar(1000)

对于我想要更改的每个字段,但有数百个字段,如果可能,我想以编程方式进行。谢谢。

【问题讨论】:

    标签: sql-server-2005 tsql parameters alter-table alter-column


    【解决方案1】:

    使用它来生成所有的 ALTER TABLEs

    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
    

    使用系统视图更容易。

    【讨论】:

    • 哇。这是一个很棒的解决方案。非常感谢!
    【解决方案2】:

    下面是一些循环遍历命名表的所有列的代码。它只是选择他们的详细信息;你需要填写你在循环中所做的事情。

    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-04-21
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      相关资源
      最近更新 更多