Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLServer如何处理Alter Table命令?_Sql_Sql Server 2008_Alter Table - Fatal编程技术网

SQLServer如何处理Alter Table命令?

SQLServer如何处理Alter Table命令?,sql,sql-server-2008,alter-table,Sql,Sql Server 2008,Alter Table,我们正在使用SQLServer2008。我们有一个现有的数据库,需要向表中的一个表添加一个新的列,该表只有2700行,但其中一列的类型为VARCHAR(8000)。当我尝试使用ALTERtable命令添加新列(CHAR(1)NULL)时,它花费了太多时间!!花了5分钟,命令仍在运行,我停止了命令。 下面是命令,我正在尝试添加新列: ALTER TABLE myTable Add ColumnName CHAR(1) NULL 有人能帮助我理解SQL Server是如何处理的吗 ALTERTAB

我们正在使用SQLServer2008。我们有一个现有的数据库,需要
表中的一个
表添加一个新的
,该表只有2700行,但其中一列的类型为
VARCHAR(8000)
。当我尝试使用
ALTER
table命令添加新列(
CHAR(1)NULL
)时,它花费了太多时间!!花了5分钟,命令仍在运行,我停止了命令。 下面是命令,我正在尝试添加新列:

ALTER TABLE myTable Add ColumnName CHAR(1) NULL
  • 有人能帮助我理解SQL Server是如何处理的吗 ALTERTABLE命令?到底发生了什么
  • 为什么要花这么多时间添加新列
  • 编辑

  • 表格大小对ALTER命令的影响是什么

  • 更改表需要模式锁。许多其他操作也需要相同的锁。毕竟,在
    select
    语句的中间添加一列是没有意义的

    因此,一种可能的解释是进程将表锁定了5分钟。然后,
    ALTER
    必须等待它自己获得锁


    您可以从SQL Server Management Studio中的活动监视器中看到被阻止的进程和被阻止的进程。

    更改表需要架构锁。许多其他操作也需要相同的锁。毕竟,在
    select
    语句的中间添加一列是没有意义的

    因此,一种可能的解释是进程将表锁定了5分钟。然后,
    ALTER
    必须等待它自己获得锁


    您可以从SQL Server Management Studio中的活动监视器中看到被阻止的进程和被阻止的进程。

    需要记住的一点是,您正在向表中添加一个新的固定长度列。按照存储中的行结构,对于每一行,所有固定长度列都放在所有可变长度列之前。因此,要进行此更改,必须更新存储中的每一行

    如果这反过来导致每个页面上可以存储的行数发生变化,则可能需要大量新的分配


    也就是说,对于所指示的行数,我不认为它应该需要5分钟——除非,正如Andomar所指出的,还涉及一些锁争用。

    好的,需要记住的一点是,您正在向表中添加一个新的定长列。按照存储中的行结构,对于每一行,所有固定长度列都放在所有可变长度列之前。因此,要进行此更改,必须更新存储中的每一行

    如果这反过来导致每个页面上可以存储的行数发生变化,则可能需要大量新的分配


    这就是说,对于所指示的行数,我不认为它应该需要5分钟——除非,正如Andomar所指出的,还涉及一些锁争用。

    +1 for ALTER table require lock。好的,那么表的大小与它无关?+1表示ALTER Table require LOCK。好的,那么桌子的大小与它无关?