0

我必须更改 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 删除索引 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 '.

谢谢,

-山姆

4

1 回答 1

2

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

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

ALTER TABLE dbo.Computation
ALTER COLUMN ComputationID NVARCHAR(25) NOT NULL
于 2012-12-18T13:59:21.987 回答