创建表DDL导致sql server挂起

创建表DDL导致sql server挂起,sql,sql-server,ddl,Sql,Sql Server,Ddl,此DDL语句中是否有任何内容可能导致系统挂起并创建长时间运行的查询 -- Abort on any error SET XACT_ABORT ON GO -- FUll isolation SET TRANSACTION ISOLATION LEVEL SERIALIZABLE GO BEGIN TRANSACTION GO CREATE TABLE ClientPayerCrosswalkMapping ( id INT IDENTITY(1, 1) NOT NULL, lbxi

此DDL语句中是否有任何内容可能导致系统挂起并创建长时间运行的查询

  -- Abort on any error
SET XACT_ABORT ON
GO
-- FUll isolation
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION
GO
CREATE TABLE ClientPayerCrosswalkMapping
( 
  id INT IDENTITY(1, 1) NOT NULL,
  lbxid INT NOT NULL,
  ClientPayerID NVARCHAR(80),

  CONSTRAINT PK_ClientPayerCrosswalkMapping_ID PRIMARY KEY CLUSTERED (id),
  CONSTRAINT UN_lbxid UNIQUE(lbxid),

  CONSTRAINT FK_LockboxDocumentTracking FOREIGN KEY (lbxid)
  REFERENCES LockboxDocumentTracking(lbxid)
);

GO
这是在SQLServer2005上,当时系统处于中等负载下


这是一个新表,为什么系统会挂起,我唯一的怀疑是该表有一个约束

请在不创建任何事务的情况下尝试此操作:

CREATE TABLE ClientPayerCrosswalkMapping
( 
  id INT IDENTITY(1, 1) NOT NULL,
  lbxid INT NOT NULL,
  ClientPayerID NVARCHAR(80),

  CONSTRAINT PK_ClientPayerCrosswalkMapping_ID PRIMARY KEY CLUSTERED (id),
  CONSTRAINT UN_lbxid UNIQUE(lbxid),

  CONSTRAINT FK_LockboxDocumentTracking FOREIGN KEY (lbxid)
  REFERENCES LockboxDocumentTracking(lbxid)
);

您真的需要事务和可序列化的隔离级别吗?如果只创建了一个表,您总是可以再次删除它,例如,如果后续的数据填充脚本失败。实际上,为什么您需要一个事务?在填充该表之后,应该有一些记录插入到该表中,这就是为什么我们有一个事务。但是,是的,它可以在没有事务的情况下执行。用事务包装DDL语句可能会有问题(具有特殊处理的临时表除外)。尝试将
CREATE TABLE..
移动到事务外部。此外,无论何时使用
SERIALIZABLE
,都可能会出现长时间延迟。