答えはイエス、それは技術的には可能ですが、あなたはそうする頭痛を持っていますし、それが実行され、セットアップに時間がかかりますです。
ワン:ここでのスクリプトの例は、[保存]をクリックすると、それが発生して実行されます:作成/コピー/ドロップ/
これは、SQL Serverのグラフィカル・インタフェースにやっていること実際にある名前を変更しますテーブルの先頭に新しい列を追加した後にボタンをクリックします。
/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/
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_SomeTable
(
MyNewColumn int NOT NULL,
OriginalIntColumn int NULL,
OriginalVarcharColumn varchar(100) NULL
) ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_SomeTable SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_SomeTable ON
GO
IF EXISTS(SELECT * FROM dbo.SomeTable)
EXEC('INSERT INTO dbo.Tmp_SomeTable (OriginalIntColumn, OriginalVarcharColumn FROM dbo.SomeTable WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_SomeTable OFF
GO
DROP TABLE dbo.SomeTable
GO
EXECUTE sp_rename N'dbo.Tmp_SomeTable', N'SomeTable', 'OBJECT'
GO
GO
COMMIT
2:COLUMN/UPDATE/DROP列を追加/ RENAME
この方法基本的に、あなたは新しい列の「正しい」に追加する任意の既存の列のコピーを作成する必要が新しい列にデータを転送した後、元のデータを削除して新しいデータの名前を変更します。これは、あなたがそれらをrepointする必要があるので、あなたが持っている任意のインデックスまたは制約で大混乱を演奏します。技術的には可能ですが、開発と実行の両方で時間がかかります。
CREATE TABLE MyTest (a int, b int, d int, e int)
INSERT INTO MyTest (a,b,d,e) VALUES(1,2,4,5)
SELECT * FROM MyTest -- your current table
ALTER TABLE MyTest ADD c int -- add a new column
ALTER TABLE MyTest ADD d_new int -- create copies of the existing columns you want to move
ALTER TABLE MyTest ADD e_new int
UPDATE MyTest SET d_new = d, e_new = e -- transfer data to the new columns
ALTER TABLE MyTest DROP COLUMN d -- remove the originals
ALTER TABLE MyTest DROP COLUMN e
EXEC SP_RENAME 'MyTest.d_new', 'd'; -- rename the new columns
EXEC SP_RENAME 'MyTest.e_new', 'e';
SELECT * FROM MyTest
DROP TABLE MyTest -- clean up the sample
3:それ
これは激しくための私の感覚を傷つけると同居...しかし、時には、それだけの価値が入れ替えではありません。
これが、すべてのテーブルの上にビューを作成する必要がある理由ですか? –
関連:http://stackoverflow.com/q/1605144/12484 –