sql-server - SQL Server 2000 删除带有约束的列

标签 sql-server sql-server-2000

我遇到了与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/

相关文章:

sql - 是什么导致了这些看似不一致的查询结果?

php - 选择特定类别后显示子类别

c# - 通过 SQL Server 存储过程调用 Team Foundation Server(TFS) API

sql - 如何根据另一张表的引用数据过滤一张表的数据?

sql - TSQL:通过自定义身份创建自定义身份吗? (管理数据库修订)

SQL查询执行缓慢(对于某些参数值)

sql-server - 如何保持事务和ssis包执行相互等待?

sql - 给定一个日期如何使用经典的 asp 获取该月的第一个和最后一个日期

.net - VB.NET 如何从 SQL 查询的文本中获取结果