我必须更改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 '.
谢谢,
萨姆
答案 0 :(得分:2)
您当前的语句会将列更改为可以为空的NVARCHAR(25)
列 - 这是您想要的吗?
如果您想确保您的专栏是NON NULL
,您必须明确说明:
ALTER TABLE dbo.Computation
ALTER COLUMN ComputationID NVARCHAR(25) NOT NULL