在SQL Server中更改列的数据类型

时间:2012-12-18 13:39:25

标签: sql sql-server-2008 indexing constraints sql-drop

我必须更改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 '.

谢谢,

萨姆

1 个答案:

答案 0 :(得分:2)

您当前的语句会将列更改为可以为空的NVARCHAR(25)列 - 这是您想要的吗?

如果您想确保您的专栏是NON NULL,您必须明确说明:

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