【问题标题】:SQL Server: set varchar to not null when column size is unknownSQL Server:当列大小未知时,将 varchar 设置为不为空
【发布时间】:2012-09-29 18:15:51
【问题描述】:

我正在尝试创建一个脚本,该脚本在对数据库运行时会获取一列并将其设置为 NOT NULL。

该列应该是 VARCHAR(50),如果我知道它没有被更改,这将是小菜一碟,但是,我不能确定没有人更改长度,所以我需要确保我不会减小列的大小,例如,如果它被其他人增加到 100。

我希望我能做这样的事情,但它似乎不起作用(假设我已经确定没有 NULL 值):

DECLARE @myColumnLength INT

SET @myColumnLength = (
    SELECT character_maximum_length
    FROM information_schema.columns
    WHERE table_name = 'mytable'
    AND column_name = 'mycolumn'
)

ALTER TABLE mytable
    ALTER COLUMN mycolumn VARCHAR(@myColumnLength) NOT NULL 

有什么想法吗?我是否以错误的方式解决问题?似乎有一种方法可以在不改变列大小的情况下将列设置为 NOT NULL,但我的 Google-fu 今天让我失望了。

【问题讨论】:

    标签: sql-server-2005 alter-table notnull


    【解决方案1】:

    您可以创建动态语句并使用EXEC 执行它:

    DECLARE @myColumnLength INT
    
    SET @myColumnLength = (
        SELECT character_maximum_length
        FROM information_schema.columns
        WHERE table_name = 'mytable'
        AND column_name = 'mycolumn'
    )
    
    DECLARE @cmd VARCHAR(1000)
    SET @cmd = 'ALTER TABLE mytable ALTER COLUMN mycolumn VARCHAR(' + @myColumnLength + ') NOT NULL'
    
    EXEC (@cmd)
    

    【讨论】:

    • 我试过你的解决方案,但似乎我必须像这样将 INT 转换为 VARCHAR: mycolumn VARCHAR('+CONVERT(VARCHAR(4),@myColumnLength)+') 当我这样做时,效果很好。
    猜你喜欢
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2023-04-05
    相关资源
    最近更新 更多