我在sql server数据库的表中有一列我要设置为' not null'。但是,当我执行查询
时ALTER TABLE mytable ALTER COLUMN mycolumn INT NOT NULL
我得到了
ALTER TABLE ALTER COLUMN mycolumn failed because one or more objects access this column.
如何找出是什么类型的对象以及如何删除它?数据库非常简单,不应该使用外键,触发器等。
答案 0 :(得分:2)
您可以搜索sys
表以找出依赖于列的内容。这当然有其局限性,但是大体上应该能够为您提供一些依赖于您的专栏的指示:
SELECT
OBJECT_NAME(D.Object_ID) AS [Dependent]
,D.Object_ID
FROM sys.sql_dependencies D
INNER JOIN sys.Columns C
ON C.object_id = D.referenced_major_id
AND C.column_id = D.referenced_minor_id
WHERE OBJECT_NAME(C.object_id) = 'MyTable'
AND C.name = 'MyColumn'
;
一旦你拥有了依赖项的名称和object_id
(它可能是一个函数,一个存储过程或任何数量的东西),你就可以从那里开始。
答案 1 :(得分:1)
在更改此表之前,您可能必须首先删除列上的约束。这可能是约束,索引或任何事物。下面是一个显示相同的小型演示
create table #test
(
id int,
id1 int
)
create index nci_t on #test(id1)
include(id)
alter table #test
alter column id1 varchar(10)
这是我得到的错误
Msg 5074,Level 16,State 1,Line 2
索引' nci_t'取决于列' id1'。
Msg 4922,Level 16,State 9,Line 2
ALTER TABLE ALTER COLUMN id1失败,因为一个或多个对象访问此列。
也请粘贴整个错误消息,不要剥开它