Saya bisa menjatuhkan tabel jika ada menggunakan kode berikut tetapi tidak tahu bagaimana melakukan hal yang sama dengan kendala:
IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'TableName') AND type = (N'U')) DROP TABLE TableName
go
Saya juga menambahkan batasan menggunakan kode ini:
ALTER TABLE [dbo].[TableName]
WITH CHECK ADD CONSTRAINT [FK_TableName_TableName2] FOREIGN KEY([FK_Name])
REFERENCES [dbo].[TableName2] ([ID])
go
sql
sql-server
sql-server-2005
tsql
solrevdev
sumber
sumber
constraint_object_id
bukan hanyaobject_id
Ini jauh lebih sederhana daripada solusi yang diusulkan saat ini:
Jika Anda perlu menghapus jenis kendala lain, ini adalah kode yang berlaku untuk masuk ke fungsi OBJECT_ID () di posisi parameter kedua:
Anda juga dapat menggunakan OBJECT_ID tanpa parameter kedua.
Daftar lengkap jenis di sini :
Jenis objek:
Berlaku untuk: SQL Server 2012 melalui SQL Server 2014.
sumber
Di SQL Server 2016 Anda dapat menggunakan DROP JIKA ADA:
Lihat http://blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016.aspx
sumber
sumber
Jawaban James bekerja dengan baik jika Anda tahu nama kendala yang sebenarnya. Yang sulit adalah bahwa dalam skenario warisan dan dunia nyata lainnya Anda mungkin tidak tahu apa kendala yang disebut.
Jika ini adalah kasus Anda berisiko membuat duplikat kendala, untuk menghindari Anda dapat menggunakan:
sumber
sumber
TRY..CATCH
blok.sumber
Saya pikir ini akan membantu Anda ...
Ini akan menghapus batasan kunci asing berdasarkan tabel dan kolom tertentu.
sumber
Anda bisa menggunakan kueri itu untuk menemukan semua FK untuk tabel Anda.
sumber
Jawaban yang diterima untuk pertanyaan ini sepertinya tidak berhasil untuk saya. Saya mencapai hal yang sama dengan metode yang sedikit berbeda:
sumber