我在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
感谢。
答案 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 )