在SQL Server中多次运行alter table alter column语句

时间:2016-11-28 19:03:54

标签: sql-server

在SQL Server中多次运行alter table alter column语句是否有任何负面影响?

假设我改变了列的数据类型和可空性,如下所示:

--create table
create table Table1 
(
    Column1 varchar(50) not null
) 
go

--insert some records
insert into Table1 values('a')
insert into Table1 values('b')
go

--alter once
alter table Table1 
    alter column Column1 nvarchar(250) not null
go

--alter twice
alter table Table1 
    alter column Column1 nvarchar(250) not null
go

上面的sql集都可以,我已经测试了这些。我还可以测试alter语句中的属性。问题是,在更改之前检查列是否已经可以为空是否有任何好处。

第一次更改后,SQL Server是否已经确定该表已被更改,因此第二个alter基本上什么也没做?

不同版本的SQL Server是否存在关于如何处理它的差异?

谢谢, ILIAS

1 个答案:

答案 0 :(得分:1)

这是仅元数据操作。

它不必读取或写入属于Dim obj as new ExpandoObject obj.test1 = "test1" Set obj.test2 = new ExpandoObject obj.test2.test = "test" 的任何数据页。但这并不是一个无操作。

它仍然会启动一个事务,获取表上的架构修改锁,并在Table1中更新此表中行的modified列(通过{{1}向我们公开) } sys.sysschobjs}中的列。

此外,由于表已被修改,任何引用该表的执行计划都需要在下次使用时重新编译。