如果存在则更改列

Bil*_*lla 5 sql sql-server sql-server-2005 sql-server-2008 sql-server-2008-r2

如果表中存在具有相同数据类型和编号的列,我想更改表

原来的tTable结构是

表名

ColumnName NVARCHAR(100)
Run Code Online (Sandbox Code Playgroud)

ColumnName如果存在且NVARCHAR长度为 100则更改列的代码

IF EXISTS(...)
BEGIN
    ALTER TABLE [dbo].[TableName]
    ALTER COLUMN [ColumnName] NVARCHAR(200) [NULL|NOT NULL]
END
Run Code Online (Sandbox Code Playgroud)

我需要在什么位置插入查找查询IF EXISTS(...)

Gar*_*thD 4

我个人总是选择 SQL Server 系统视图而不是 INFORMATION_SCHEMA,原因由 Aaron Bertrand 详细说明。额外的优点是,在这种情况下,您可以排除计算列,这些列仅显示为表中的普通列INFORMATION_SCHEMA.COLUMNS

IF EXISTS
    (   SELECT  1
        FROM    sys.columns c
                INNER JOIN sys.types t
                    ON t.system_type_id = c.system_type_id
                    AND t.user_type_id = c.user_type_id
        WHERE   c.name = 'ColumnName'
        AND     c.[object_id] = OBJECT_ID(N'dbo.TableName', 'U')
        AND     t.name = 'nvarchar'
        AND     c.max_length = 100
        AND     c.is_computed = 0
    )
    BEGIN
        ALTER TABLE [dbo].[TableName]
        ALTER COLUMN [ColumnName] NVARCHAR(200) [NULL|NOT NULL]
    END;
Run Code Online (Sandbox Code Playgroud)

如SQL Fiddle中所示,当使用信息模式方法时,您可能会尝试更改计算列并收到错误。