2017-03-13 31 views
2

我在一個sql server數據庫的表中有一列,我想將其設置爲'not null'。然而,當我執行查詢在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

嘗試重新啓動sql server服務。 –

+0

不幸的是它不起作用 – Ferenjito

回答

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

在更改此表之前,您可能必須先刪除對列的約束。這可能是約束,索引或任何事情。 。下面是表示同一

create table #test 
(
id int, 
id1 int 
) 

create index nci_t on #test(id1) 
include(id) 

alter table #test 
alter column id1 varchar(10) 

這是我得到

消息5074的錯誤,級別16,狀態1,行2
索引「nci_t」是依賴於柱小演示'ID1'。
消息4922,級別16,狀態9,行2
ALTER TABLE ALTER COLUMN id1失敗,因爲一個或多個對象訪問此列。

還請粘貼整個錯誤消息,請不要剝奪它

相關問題