【发布时间】:2018-06-19 01:09:26
【问题描述】:
我在 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];
错误信息:
消息 5074,第 16 级,状态 1,第 2 行
对象“PK__TBL__3F4E83EE204C47AA”依赖于列“myDate”。消息 4922,第 16 级,状态 9,第 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
谢谢。
【问题讨论】:
-
您是在尝试
ALTER两个表,还是忘记在示例中的所有三个语句中混淆表名? -
首先:如果您要自己指定约束名称,请使它们有用 - 不要使用这些神秘的系统生成名称!另外:该唯一索引完全没用,因为您已经在相同的列上定义了 PK - 按定义的 PK 是唯一的 - 创建第二个唯一索引没有用在这些列上
标签: sql-server ddl