我遇到了与this question中描述的相同的问题,但这是 SQL Server 2005,“接受”的答案在 SQL Server 2000 中不起作用。
具体来说:我正在尝试运行ALTER TABLE foo DROP COLUMN bar
,但它失败了,因为存在“默认约束”。这意味着,我在该列上有一个默认值,SQL Server 将其实现为一个单独的约束,我需要先将其删除。
问题是创建列时没有为默认约束指定名称,因此我必须查询系统表以发现约束的(自动生成的)名称。
其他问题中给出的答案适用于 SQL Server 2005,但不适用于 SQL Server 2000。我需要后者。
[更新]我需要一个查询来回答这个问题“表foo
”中列bar
的默认约束的名称是什么>。”这不是人类手动查找答案的方法。
最佳答案
刚刚弄清楚引用的 SQL 2005 查询实际上在做什么。下面是在 SQL 2000 中运行的该查询的复制
select
col.name,
col.colorder,
col.cdefault,
OBJECTPROPERTY(col.cdefault, N'IsDefaultCnst') as is_defcnst,
dobj.name as def_name
from syscolumns col
left outer join sysobjects dobj
on dobj.id = col.cdefault and dobj.type = 'D'
where col.id = object_id(N'dbo.table_name')
and dobj.name is not null
关于sql-server - SQL Server 2000 删除带有约束的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/774644/