2010年8月12日 星期四

SQL Server 增加欄位的至指定位置的錯覺

如果你以SQL Server Management Studio來編輯現有Table的欄位位置,感覺好像很方便,但說穿了,不過是玩了一招移花接木的招數而已。有圖為證:

原本Test 表只有一個a欄位,我用Studio修改該表,加入一個新欄位v並且放到a前面,然後按下左上角的「產生變更指令」後,就可看到上面的圖示;我把指令給「放大」如下:

/* 為了避免發生資料可能遺失的任何問題,您應該先詳細檢視此指令碼,然後才能在資料庫設計工具環境以外的位置執行。*/
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_test
(
v nchar(10) NULL,
a varchar(20) NULL
) ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.test)
EXEC('INSERT INTO dbo.Tmp_test (a)
SELECT a FROM dbo.test WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.test
GO
EXECUTE sp_rename N'dbo.Tmp_test', N'test', 'OBJECT'
GO
COMMIT


就這樣,當你以為SQL 2005真的做了什麼了不起的事的時候,小心,說不定它也只是取巧而以。

沒有留言:

張貼留言