我必須更改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
這將有助於瞭解你需要從改變什麼,以及如何?之前的類型是什麼 - 它應該在什麼後面?這裏的改變會創建一個**可爲空的''NVARCHAR(25)'列 - 是你想要的嗎? –
@marc_sIts一個非空列。我需要創建一個非空列 – Sam
所以它應該像'ALTER TABLE dbo.Computation ALTER COLUMN ComputationID NVARCHAR(25)非空'對不對?並且索引的語法沒有問題? – Sam