Saya memiliki kolom dalam tabel di database server sql yang ingin saya setel ke 'bukan nol'. Namun, ketika saya menjalankan kueri

ALTER TABLE mytable ALTER COLUMN mycolumn INT NOT NULL 

Saya mendapatkan

ALTER TABLE ALTER COLUMN mycolumn failed because one or more objects access this column.

Bagaimana cara mengetahui jenis objek itu dan bagaimana cara menjatuhkannya? Basis datanya sangat sederhana dan tidak seharusnya menggunakan kunci asing, pemicu, dll.

2
Lokomotywa 13 Maret 2017, 12:02

2 jawaban

Jawaban Terbaik

Anda dapat mencari tabel sys untuk mengetahui apa yang bergantung pada kolom. Ini memiliki keterbatasan, tentu saja, tetapi pada umumnya akan memberi Anda beberapa indikasi tentang apa yang bergantung pada kolom Anda:

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'
;

Setelah Anda memiliki nama dan object_id dari dependen (mungkin sebuah fungsi, prosedur tersimpan, atau sejumlah hal lainnya), Anda dapat pergi dari sana.

2
3BK 13 Maret 2017, 10:27

Anda mungkin harus menghilangkan batasan pada kolom terlebih dahulu, sebelum mengubah tabel ini. Ini mungkin batasan, indeks, atau apa pun.. di bawah ini adalah demo kecil yang menunjukkan hal yang sama

create table #test
(
id int,
id1 int
)

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

alter table #test
alter column id1 varchar(10)

Ini adalah kesalahan yang saya dapatkan

Msg 5074, Level 16, State 1, Line 2
Indeks 'nci_t' bergantung pada kolom 'id1'.
Msg 4922, Level 16, State 9, Line 2
ALTER TABLE ALTER COLUMN id1 gagal karena satu atau beberapa objek mengakses kolom ini.

Juga silakan rekatkan seluruh pesan kesalahan, jangan hapus!

1
TheGameiswar 13 Maret 2017, 09:17