不过,企业管理器里面生成的处理脚本并不一定是最优的,它有时以很愚蠢的方式来处理问题,看下面的粘贴:要谨慎使用 Enterprise Manager。希望您能够了解在屏幕后的运行情况,并确保在 Enterprise Manager 不能有效运行时使用 T-SQL。 现在,假设必须把 customerid 列从 varchar(5) 增大到 varchar(10)。使用 T-SQL 可以编写一个简短、有效的脚本。这是因为 SQL Server 不需要在物理上访问每行以增大 varchar 列,而只是在元数据中表达这个更改,所以这个脚本可以在瞬间运行。 ALTER TABLE ttt ALTER COLUMN a VARCHAR(10) NULL go 而企业管理器生成的脚本却是: BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON SET TRANSACTION ISOLATION LEVEL SERIALIZABLE SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON COMMIT BEGIN TRANSACTION CREATE TABLE dbo.Tmp_ttt ( a char(10) NULL ) ON [PRIMARY] GO IF EXISTS(SELECT * FROM dbo.ttt) EXEC('INSERT INTO dbo.Tmp_ttt (a) SELECT a FROM dbo.ttt TABLOCKX') GO DROP TABLE dbo.ttt GO EXECUTE sp_rename N'dbo.Tmp_ttt', N'ttt', 'OBJECT' GO COMMIT
不过,企业管理器里面生成的处理脚本并不一定是最优的,它有时以很愚蠢的方式来处理问题,看下面的:要谨慎使用 Enterprise Manager。希望您能够了解在屏幕后的运行情况,并确保在 Enterprise Manager 不能有效运行时使用 T-SQL。 现在,假设必须把表ttt的a列从 varchar(5) 增大到 varchar(10)。使用 T-SQL 可以编写一个简短、有效的脚本。这是因为 SQL Server 不需要在物理上访问每行以增大 varchar 列,而只是在元数据中表达这个更改,所以这个脚本可以在瞬间运行。 ALTER TABLE ttt ALTER COLUMN a VARCHAR(10) NULL go 而企业管理器生成的脚本却是: BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON SET TRANSACTION ISOLATION LEVEL SERIALIZABLE SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON COMMIT BEGIN TRANSACTION CREATE TABLE dbo.Tmp_ttt ( a char(10) NULL ) ON [PRIMARY] GO IF EXISTS(SELECT * FROM dbo.ttt) EXEC('INSERT INTO dbo.Tmp_ttt (a) SELECT a FROM dbo.ttt TABLOCKX') GO DROP TABLE dbo.ttt GO EXECUTE sp_rename N'dbo.Tmp_ttt', N'ttt', 'OBJECT' GO COMMIT
用事件探查器看to;zjcxc(邹建)确实是删除重建的,我以为用alter table行呢?好的,谢谢邹老大,结帖。
通过企业管理器修改表结构时,上面的第一个是'保存',第二个是'表和索引属性',第三个是'保存更改脚本'....
点第三个就可以看到了.
好方法,呵呵,我以前还没有用过呢?谢谢了!
现在,假设必须把 customerid 列从 varchar(5) 增大到 varchar(10)。使用 T-SQL 可以编写一个简短、有效的脚本。这是因为 SQL Server 不需要在物理上访问每行以增大 varchar 列,而只是在元数据中表达这个更改,所以这个脚本可以在瞬间运行。
ALTER TABLE ttt
ALTER COLUMN a VARCHAR(10) NULL
go
而企业管理器生成的脚本却是:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_ttt
(
a char(10) NULL
) ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.ttt)
EXEC('INSERT INTO dbo.Tmp_ttt (a)
SELECT a FROM dbo.ttt TABLOCKX')
GO
DROP TABLE dbo.ttt
GO
EXECUTE sp_rename N'dbo.Tmp_ttt', N'ttt', 'OBJECT'
GO
COMMIT
现在,假设必须把表ttt的a列从 varchar(5) 增大到 varchar(10)。使用 T-SQL 可以编写一个简短、有效的脚本。这是因为 SQL Server 不需要在物理上访问每行以增大 varchar 列,而只是在元数据中表达这个更改,所以这个脚本可以在瞬间运行。
ALTER TABLE ttt
ALTER COLUMN a VARCHAR(10) NULL
go
而企业管理器生成的脚本却是:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_ttt
(
a char(10) NULL
) ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.ttt)
EXEC('INSERT INTO dbo.Tmp_ttt (a)
SELECT a FROM dbo.ttt TABLOCKX')
GO
DROP TABLE dbo.ttt
GO
EXECUTE sp_rename N'dbo.Tmp_ttt', N'ttt', 'OBJECT'
GO
COMMIT