【发布时间】:2020-04-08 14:45:09
【问题描述】:
在我们的数据库中采用一些新的计算字段时,我们需要能够恢复更改,然后再将它们放回去。
基本问题可以用下面的脚本来解释。它不起作用,因为在删除列 Field1 之前应该删除生成的约束:
CREATE TABLE Table1
(
Field1 DECIMAL(19, 2) NOT NULL DEFAULT(0.0),
Field2 AS Field1
)
GO
ALTER TABLE Table1
DROP COLUMN Field2, Field1
GO
DROP TABLE Table1
GO
SSMS 显示:
消息 5074,第 16 级,状态 1,第 10 行
对象“DF__Table1__Field1__5AC46587”依赖于列“Field1”。消息 4922,第 16 级,状态 9,第 10 行
ALTER TABLE DROP COLUMN Field1 失败,因为一个或多个对象访问此列。
如果在删除列 Field1 之前删除了约束 DF__Table1__Field1__5AC46587,则代码有效:
ALTER TABLE Table1
DROP CONSTRAINT DF__Table1__Field1__5AC46587
GO
问题是每次创建Field2时,约束的名字都不一样。
是否可以为此约束设置一个常量名称,或者以某种方式在脚本中轻松找到它?
【问题讨论】:
-
您可以将约束添加为单独的命令并为其命名。如果您使用 SSMS 为您的表格编写脚本,它会完全照此执行。
-
@DaleK:恐怕不会。据我了解,约束与将列创建为计算列紧密相关。之后无法使用单独的命令创建它(没有任何意义吗?)
-
计算列没有约束?约束在 Field1 上,它是一个真实字段,计算列是 Field2。所以问题不在于您的计算列,错误是指 Field1?因此,您可以在创建期间或之后命名约束,随心所欲。
-
@DaleK:我错了,建议的答案也回答了这个问题。
标签: sql-server tsql