Sql server SQL Server:仅当现有列的长度较小时才更改列

Sql server SQL Server:仅当现有列的长度较小时才更改列,sql-server,Sql Server,我正在尝试创建一个脚本,该脚本仅在列大小不正确时才会更改列。像这样的 IF NOT EXISTS (SELECT COL_LENGTH('dbo.TSC701_OCT_CONTEXT', 'sql_stmt') = 1000 ) BEGIN ALTER TABLE dbo.TSC701_OCT_CONTEXT ALTER COLUMN sql_stmt VARCHAR(1000) END IF (SELECT CASE WHEN COL_LENGTH('dbo.TSC

我正在尝试创建一个脚本,该脚本仅在列大小不正确时才会更改列。像这样的

IF NOT EXISTS (SELECT COL_LENGTH('dbo.TSC701_OCT_CONTEXT', 'sql_stmt') = 1000 )
BEGIN
    ALTER TABLE dbo.TSC701_OCT_CONTEXT 
        ALTER COLUMN sql_stmt VARCHAR(1000)
END
IF (SELECT CASE WHEN COL_LENGTH('dbo.TSC701_OCT_CONTEXT', 'sql_stmt') <> 1000 THEN 1 END) = 1
BEGIN ALTER TABLE dbo.TSC701_OCT_CONTEXT alter column sql_stmt varchar(1000) END

很抱歉语法错误

您可以这样尝试

IF NOT EXISTS (SELECT COL_LENGTH('dbo.TSC701_OCT_CONTEXT', 'sql_stmt') = 1000 )
BEGIN
    ALTER TABLE dbo.TSC701_OCT_CONTEXT 
        ALTER COLUMN sql_stmt VARCHAR(1000)
END
IF (SELECT CASE WHEN COL_LENGTH('dbo.TSC701_OCT_CONTEXT', 'sql_stmt') <> 1000 THEN 1 END) = 1
BEGIN ALTER TABLE dbo.TSC701_OCT_CONTEXT alter column sql_stmt varchar(1000) END
IF(选择COL_LENGTH('dbo.TSC701_OCT_CONTEXT','sql_stmt')1000时的大小写,然后1 END)=1
BEGIN ALTER TABLE dbo.TSC701_OCT_CONTEXT ALTER column sql_stmt varchar(1000)END

您可以这样尝试

IF NOT EXISTS (SELECT COL_LENGTH('dbo.TSC701_OCT_CONTEXT', 'sql_stmt') = 1000 )
BEGIN
    ALTER TABLE dbo.TSC701_OCT_CONTEXT 
        ALTER COLUMN sql_stmt VARCHAR(1000)
END
IF (SELECT CASE WHEN COL_LENGTH('dbo.TSC701_OCT_CONTEXT', 'sql_stmt') <> 1000 THEN 1 END) = 1
BEGIN ALTER TABLE dbo.TSC701_OCT_CONTEXT alter column sql_stmt varchar(1000) END
IF(选择COL_LENGTH('dbo.TSC701_OCT_CONTEXT','sql_stmt')1000时的大小写,然后1 END)=1
BEGIN ALTER TABLE dbo.TSC701_OCT_CONTEXT ALTER column sql_stmt varchar(1000)END

实际上,IF子句中不需要SELECT语句

IF (COL_LENGTH('dbo.TSC701_OCT_CONTEXT', 'sql_stmt') < 1000)
BEGIN
    ALTER TABLE [Table Name]
    ALTER COLUMN [Column Name] varchar(1000) null
END

实际上,在IF子句中不需要SELECT语句

IF (COL_LENGTH('dbo.TSC701_OCT_CONTEXT', 'sql_stmt') < 1000)
BEGIN
    ALTER TABLE [Table Name]
    ALTER COLUMN [Column Name] varchar(1000) null
END

以下是我的结论:

IF NOT EXISTS (SELECT 1 FROM sys.columns 
            WHERE name = 'sql_stmt' AND object_id = object_id('CONTEXT') and max_length = 1000)
BEGIN
    ALTER TABLE dbo.CONTEXT ALTER COLUMN [sql_stmt] varchar (1000) NULL
END

走吧

以下是我的结局:

IF NOT EXISTS (SELECT 1 FROM sys.columns 
            WHERE name = 'sql_stmt' AND object_id = object_id('CONTEXT') and max_length = 1000)
BEGIN
    ALTER TABLE dbo.CONTEXT ALTER COLUMN [sql_stmt] varchar (1000) NULL
END

GO

我认为,一个
更改表
在其中您基本上没有指定任何实际更改是有效的,并且会产生低(或无)成本。如果实际上是不可操作的,那么您确定值得所有的努力来避免进行更改吗?我相信
ALTER TABLE
如果您指定基本上没有实际更改,那么它是有效的,并且会产生低(或无)成本。如果事实上这是不可行的,你确定值得所有的努力来避免做出改变吗?