create table t(
a int identity(1,1),
b int)
insert into t select 1 union select 2
能用一条语句删除标识吗?也就是把表结构变成
create table t(
a int,
b int)
里面的数据保持不变
再次重申:是用一条语句,用存储过程实现,或删除列重新建立不算,用企业管理器操作不算
...全文
1949打赏收藏
identity列,能在保留列的情况下,删除它的标识吗?
create table t( a int identity(1,1), b int) insert into t select 1 union select 2 能用一条语句删除标识吗?也就是把表结构变成 create table t( a int, b int) 里面的数据保持不变 再次重申:是用一条语句,用存储过程实现,或删除列重新建立不算,用企业管理器操作不算
要谨慎使用 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
要谨慎使用 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