2012-12-18 62 views
0

我必須更改SQL Server中列的數據類型。那麼在做什麼約束呢?在SQL Server中更改列的數據類型

我知道我必須刪除索引和其他約束?

我必須刪除不空檢查嗎?

在更改數據類型之前我還需要檢查其他什麼東西?

我需要刪除約束並更改表,然後再次添加約束。

這是否正確嗎?

DROP INDEX UX_1_COMPUTATION ON dbo.Computation 

ALTER TABLE dbo.Computation 
ALTER COLUMN ComputationID NVARCHAR(25) 

CREATE UNIQUE INDEX UX_1_COMPUTATION ON dbo.Computation (ComputationID); 

這裏UX_1_COMPUTATION是唯一索引的名稱,Computation是表名和 ComputationID是列名。

這是正確的嗎?

Update

所以,如果有一個composite index,其中有超過一列參與,我該如何處理呢?這些索引包含具有非主鍵列的主鍵列。

,當我試圖執行以下語句

DROP INDEX UX_2_COMPUTATION ON dbo.Computation 

ALTER TABLE dbo.Computation 
ALTER COLUMN ComputationID NVARCHAR(25) 

CREATE UNIQUE INDEX UX_2_COMPUTATION ON dbo.Computation (ComputationID , ComputeGuid); 

它拋出以下異常

SQL DROP INDEX UX_2_COMPUTATION

 ON dbo.Computation 

     ALTER TABLE dbo.Computation 

     ALTER COLUMN ComputationID NVARCHAR(10) Not Null 

     CREATE INDEX UX_2_COMPUTATION 

     ON dbo.Computation (ComputationID , ComputeGuid): The object 

'PK_Computation' is dependent on column 'ComputationID '.: 

     Caused By: Error executing SQL DROP INDEX UX_2_COMPUTATION 

     ON dbo.Computation 

     ALTER TABLE dbo.Computation 

     ALTER COLUMN ComputationID NVARCHAR(10) Not Null 

     CREATE INDEX UX_2_COMPUTATION 

     ON dbo.Computation (ComputationID , ComputeGuid): The object 

'PK_Computation' is dependent on column 'ComputationID '.: 

     Caused By: The object 'PK_Computation' is dependent on column 'ComputationID '. 

感謝,

-Sam

+1

這將有助於瞭解你需要從改變什麼,以及如何?之前的類型是什麼 - 它應該在什麼後面?這裏的改變會創建一個**可爲空的''NVARCHAR(25)'列 - 是你想要的嗎? –

+0

@marc_sIts一個非空列。我需要創建一個非空列 – Sam

+0

所以它應該像'ALTER TABLE dbo.Computation ALTER COLUMN ComputationID NVARCHAR(25)非空'對不對?並且索引的語法沒有問題? – Sam

回答

2

您當前的聲明會將列更改爲可空的NVARCHAR(25)列 - 是您想要的嗎?

如果你想確保你的列將是NON NULL,你必須明確地說明這一點:

ALTER TABLE dbo.Computation 
ALTER COLUMN ComputationID NVARCHAR(25) NOT NULL 
+4

對於**創建的列,如果未指定,則缺省的可空性取決於「SET ANSI_NULL_DFLT_ON」和「ANSI空默認值」數據庫選項。對於更改的列,如果未指定,即使最初它們是'NOT NULL',它也將始終使它們成爲'NULL'。 –

+0

@MartinSmith:感謝您的更新 - 總是有好的額外的專家級建議! :-) –

相關問題