【问题标题】:How to change CHARACTER_MAX_LENGTH of specific tables如何更改特定表的 CHARACTER MAX LENGTH
【发布时间】:2014-07-22 08:31:08
【问题描述】:

我有多个表,其中的列需要通过外键链接,问题是其中一些列具有不同的 character_max_length 如何更新这些特定表?

列的示例选择语句:

SELECT column_name, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE UPPER(column_name) LIKE '%MUNT%'

这给了我这个:

现在假设我必须将它们全部更改为 5

我之前使用过this code 来更改数据类型,也许这会有所帮助?

感谢您考虑我的问题

【问题讨论】:

  • 你使用哪个数据库(mysql、sql-server、oracle ..)?
  • 我的错:我使用的是 sql server 2012,数据库版本是 2008
  • @Alma Do,看到 select 语句有效并给了我正确的输出,我会说是的

标签: sql sql-server alter-table alter


【解决方案1】:

你试过了吗:

Alter tabel tableName alter column columnName NVARCHAR(5)

或者试试这个更通用的版本:

use [YourDatabaseName]

declare @tn nvarchar(128)
declare @cn nvarchar(128)
declare @sql as nvarchar(1000)

declare c cursor for 
    select table_name,column_name
    from information_schema.columns 
    where TABLE_NAME not in (select TABLE_NAME from INFORMATION_SCHEMA.VIEWS)
    AND UPPER(column_name) LIKE '%MUNT%'
open c
fetch next from c into @tn, @cn

while @@FETCH_STATUS = 0
begin
    set @sql = 'alter table ' + @tn + ' alter column ' 
        + @cn + ' nvarchar(5)'
    exec sp_executesql @sql
    fetch next from c into @tn, @cn
end
close c
deallocate c

【讨论】:

  • 我知道这会起作用,但假设我有 200 列要更改,我不会编辑该查询 200 次。我会考虑在 alter 语句中使用子查询,但这不起作用
  • ,感谢您的时间和精力,这对我帮助很大。给其他人的一个小提示,在制作主键/外键之前进行这些更改并确保所有数据类型和长度都是正确的,否则您将遇到困难。
【解决方案2】:

您可以通过用户界面或使用ALTER TABLE 更改表定义

【讨论】:

    猜你喜欢
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多