TSQL新しいフィールドのデータテーブルへ

要約:TSQL新しいフィールドのデータテーブルへ


あなたは事の何いくつかを行うには、SQLを表を使用するときに我々はSSMSのUIインターフェイスにフィールドを追加しました知っていますか?

理解されています、スクリプトは、実質的にSQLの手順を以下のことができます。

(1)新しいデータテーブル(新しいスキーマ)の確立。

(2)新しいテーブルデータテーブルに古いデータを挿入します。

(3)旧データテーブルを削除します。

(4)新しいデータテーブルには、古いデータテーブルに社名を変更しました。

(5)インデックス。

あなただけの新しいフィールドは、「データテーブルに追加したいのであれば背後にある」、そして直接行うために表を変更し、UIを行いません。

あなたは、フィールドとフィールドの範囲でなければならないデータフィールドの間にある場合は、テーブルの変更を使用しないでください。

Alter Table [tablename] Add [NewClo1] Char(1),[NewCol2] Char(10)

あなたはUIを使用する場合、プロセス全体のスクリプトは次のように:

/* 为了避免任何可能发生数据遗失的问题,您应该先详细检视此命令码,然后才能在数据库设计工具环境以外的位置执行。*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
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
GO
CREATE TABLE dbo.Tmp_indextest
	(
	id int NOT NULL IDENTITY (1, 1),
	id1 int NULL,
	id2 int NULL,
	aa nchar(10) NULL,
	name nchar(100) NULL,
	name2 nchar(100) NULL
	)  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_indextest SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_indextest ON
GO
IF EXISTS(SELECT * FROM dbo.indextest)
	 EXEC('INSERT INTO dbo.Tmp_indextest (id, id1, id2, name, name2)
		SELECT id, id1, id2, name, name2 FROM dbo.indextest WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_indextest OFF
GO
DROP TABLE dbo.indextest
GO
EXECUTE sp_rename N'dbo.Tmp_indextest', N'indextest', 'OBJECT' 
GO
CREATE UNIQUE CLUSTERED INDEX Cluster_index ON dbo.indextest
	(
	id
	) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX NonCluster_index ON dbo.indextest
	(
	id
	) INCLUDE (id1, id2) 
 WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
COMMIT

しかし、私はより速く、プロセスを簡素化するので、新しいを作成するために、データ・テーブルに選択してスクリプトを(下)、書きたいと基本的に作り出すことができません

トランザクションの独立ログには、次の練習では、あなたのデータテーブルは、トリガーレプリケーションまたは他の機能に有用であるならば、あなたは注意する必要がありますなど、単純なデータテーブルにのみ適用されます。

SET XACT_ABORT ON;
BEGIN TRAN
BEGIN TRY
	SELECT 
		id,
		Cast('' as nchar(20)) AS NewCol1,--加入的新字段1
		Cast('' as char(20)) AS NewCol2,--加入的新字段2
		id1,id2,name,name2 
	INTO DesTable 
	FROM SourceTable WITH (HOLDLOCK TABLOCKX);
	
	EXEC sp_rename N'SourceTable',N'SourceTable_old';
	EXEC sp_rename N'DesTable',N'SourceTable';
END TRY
BEGIN CATCH
	ROLLBACK;
	PRINT 'PROCESS FAIL!';
END CATCH 
IF @@TRANCOUNT > 0 COMMIT;

--完成后!注意权限设定及索引建立,都测试OK后Drop掉旧Table

私はROCKです

[email protected]

オリジナル:ビッグボックス  のデータテーブルにTSQL新しいフィールド


おすすめ

転載: www.cnblogs.com/chinatrump/p/11490801.html