gpt4 book ai didi

sql-server - 在 SQL Server 中更改 "Default"

转载 作者:行者123 更新时间:2023-12-01 06:19:30 25 4
gpt4 key购买 nike

我在 SQL Server 2008 表中有自定义 default 值。

类似的

CREATE DEFAULT [dbo].[Default_Timestamp]
AS
GetDate()

现在我想更改该默认值。

CREATE DEFAULT [dbo].[Default_Timestamp]
AS
GETUTCDATE()

在我可以编辑现有的之前,我需要删除第一个并重新创建它。

DROP DEFAULT [dbo].[Default_Timestamp]

它给出以下错误。

Msg 3716, Level 16, State 3, Line 4
The default 'dbo.Default_Timestamp' cannot be dropped because it is bound to one or more column.

由于默认值已被少数表使用,我无法删除并重新创建一个新表。

我知道在重新创建它之前,我需要解除所有表与此默认值的绑定(bind)。

谁能提供一个脚本来列出与该默认值绑定(bind)的所有表和列?

最佳答案

这是一个多步骤的过程:

1) 找到默认的 object_id :

DECLARE @DefaultObjectID INT
SELECT @DefaultObjectID = OBJECT_ID('Default_Timestamp')

2) 查找所有引用该默认值的列:

SELECT 
ColumnName = c.Name,
TableName = t.Name,
UnbindCmd = 'EXEC sp_unbindefault ''' + t.Name + '.' + c.name + ''''
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id = t.object_id
WHERE default_object_id = @DefaultObjectID

这将生成一个 UnbindCmd 命令列表,以实际从这些列中删除 DEFAULT

3) 现在,从您的 SQL Server Mgmt Studio 窗口复制该列,并在新的查询窗口中执行它以实际“取消绑定(bind)”所有这些列的默认值

4) 现在定义您的新默认值

然而:这些天来,我可能不会定义一个新的 DEFAULT 本身 - 你不能只设置默认约束直接有问题的列?

ALTER TABLE dbo.YourTable
ADD CONSTRAINT DF_YourTable_TimeStamp
DEFAULT GETUTCDATE() FOR YourColumnName

似乎更容易进入 future !当您明确命名约束时,如果需要,您还可以轻松找到并再次删除该约束。

关于sql-server - 在 SQL Server 中更改 "Default",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11272831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com