尝试更改列类型时出错

时间:2018-01-09 22:38:33

标签: sql-server ddl

我在SQL Server 2016中有一个现有的DATETIME列。我需要编写一个DDL脚本来将其更改为DATE类型。

当我运行以下脚本时,收到错误消息。不确定我该如何解决它......

ALTER TABLE [dbo].[TBL_MyTable] 
    DROP CONSTRAINT [PK__TBL__3F4E83EE204C47AA];

ALTER TABLE [dbo].[TBL_MyTable] 
    ALTER COLUMN myDate DATE;

ALTER TABLE [dbo].[TBL_MyTable] 
    ADD CONSTRAINT [PK__TBL__3F4E83EE204C47AA]; 

错误讯息:

  

Msg 5074,Level 16,State 1,Line 2
  对象'PK__TBL__3F4E83EE204C47AA'依赖于列'myDate'。

     

Msg 4922,Level 16,State 9,Line 2
  ALTER TABLE ALTER COLUMN myDate失败,因为一个或多个对象访问此列。

表格定义:

CREATE TABLE "dbo"."TBL_MyTable"
(
     column1,
     myDate datetime NOT NULL,,
     column2,
     column3,

     CONSTRAINT PK__TBL__3F4E83EE204C47AA 
         PRIMARY KEY (column1, myDate, column2, column3)
)
GO

CREATE UNIQUE INDEX PK__TBL__3F4E83EE204C47AA 
    ON "dbo"."TBL_MyTable" (column1, myDate, column2, column3)
GO

感谢。

2 个答案:

答案 0 :(得分:0)

我将DATE列创建为新列,填充它,然后删除DATETIME列。

ALTER TABLE [dbo].[TBL_MyTable] DROP CONSTRAINT [PK__TBL__3F4E83EE204C47AA]
GO
ALTER TABLE [dbo].[TBL_MyTable] ADD MyDateCol DATE
GO

UPDATE [dbo].[TBL_MyTable]
SET MyDateCol = CAST(myDate AS DATE)
GO

ALTER TABLE [dbo].[TBL_MyTable] DROP COLUMN myDate
GO

CREATE UNIQUE INDEX PK__TBL__3F4E83EE204C47AA ON [dbo].[TBL_MyTable]
(
  column1,
  MyDateCol,
  column2,
  column3
)
GO

答案 1 :(得分:0)

您可以使用以下代码

ALTER TABLE [dbo]。[TBL_MyTable]     DROP CONSTRAINT [PK__TBL__3F4E83EE204C47AA];

ALTER TABLE [dbo]。[TBL_MyTable]     ALTER COLUMN myDate DATE不为空;

ALTER TABLE [dbo]。[TBL_MyTable]     添加约束[PK__TBL__3F4E83EE204C47AA]主键 (   列1,   我的约会,   列2,   栏3 )