ओरेकल में, जैसेएसक्यूएल सर्वर: ड्रॉप टेबल कैस्केड बराबर?
DROP TABLE myTable CASCADE CONSTRAINTS PURGE;
सभी तालिकाओं और बाधाओं आप कुछ टाइप करेंगे ड्रॉप करने और यह पूरी तरह से मेज और उनकी निर्भरता को नष्ट करेगा। एसक्यूएल सर्वर समतुल्य क्या है ??
ओरेकल में, जैसेएसक्यूएल सर्वर: ड्रॉप टेबल कैस्केड बराबर?
DROP TABLE myTable CASCADE CONSTRAINTS PURGE;
सभी तालिकाओं और बाधाओं आप कुछ टाइप करेंगे ड्रॉप करने और यह पूरी तरह से मेज और उनकी निर्भरता को नष्ट करेगा। एसक्यूएल सर्वर समतुल्य क्या है ??
मुझे विश्वास नहीं है कि एसक्यूएल का एक समान सुरुचिपूर्ण समाधान है। तालिका छोड़ने से पहले आपको किसी भी संबंधित बाधाओं को छोड़ना होगा।
सौभाग्य से, यह सब जानकारी स्कीमा में संग्रहीत है और आप अपनी सनकी सूची प्राप्त करने के लिए उस तक पहुंच सकते हैं। http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx
-- t-sql scriptlet to drop all constraints on a table
DECLARE @database nvarchar(50)
DECLARE @table nvarchar(50)
set @database = 'DatabaseName'
set @table = 'TableName'
DECLARE @sql nvarchar(255)
WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
BEGIN
select @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @table
exec sp_executesql @sql
END
एसक्यूएल सर्वर प्रबंधन स्टूडियो में, विकल्प/एसक्यूएल सर्वर ऑब्जेक्ट एक्सप्लोरर/पटकथा पर जाएँ, और 'निर्भर के लिए स्क्रिप्ट उत्पन्न सक्षम:
इस ब्लॉग पोस्ट आपको क्या चाहिए आप प्राप्त करने में सक्षम होना चाहिए वस्तुओं '। फिर तालिका, स्क्रिप्ट> ड्रॉप>> नई क्वेरी विंडो पर राइट क्लिक करें और यह आपके लिए इसे उत्पन्न करेगा।
डीबी में सभी ऑब्जेक्ट्स को छोड़ने के लिए भी काम करता है। एसएसएमएस की भयानक शक्ति का एक और उदाहरण। मुझे sys.objects से खुद को पटकथा बचाया !! –
ओपी के लिए इतना अच्छा समाधान नहीं है, अब मैं समझता हूं कि यह डिफ़ॉल्ट रूप से क्यों अक्षम है।किसी भी तरह से सभी टेबल 'ContactInfo' तालिका पर "निर्भर" हैं ... ugh ... –
यह एक भयानक समाधान हो सकता है, लेकिन मुझे लगता है कि यह तेज़ है। यह विनी के उत्तर के समान है, लेकिन SQL कथन का उत्पाद SQL कथन की एक और श्रृंखला है जो सभी बाधाओं और तालिकाओं को हटा देगा।
(
select
'ALTER TABLE ' + tc.table_name + ' DROP CONSTRAINT ' + tc.constraint_name + ';'
from
INFORMATION_SCHEMA.TABLES t
,INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
where
t.table_name = tc.table_name
and tc.constraint_name not like '%_pk'
and tc.constraint_name not like 'pk_%'
and t.table_catalog='<schema>'
) UNION (
select
'DROP TABLE ' + t.table_name + ';'
from
INFORMATION_SCHEMA.TABLES t
where
t.table_catalog='<schema>'
)
आखिरकार हम अपनी मेज हटा रहे हैं। तो हम बस आदेश के बाद 2 चला सकते हैं:
ALTER तालिका ... ड्रॉप बाधा ...
ड्रॉप तालिका ...
1> परिवर्तन तालिका PRJ_DETAILS ड्रॉप बाधा FK_PRJ_TYPE;
- टेबल नाम और बाधा नाम पैरामीटर
2> ड्रॉप टेबल रहे हैं।
इसके साथ जुड़े नाम के साथ पहली ड्रॉप बाधा दूसरा आप तालिका छोड़ सकते हैं।
यह मेरे लिए और इसके आसान भी काम करता है।
यह
तब मैं कोड इसलिए की तरह प्रदान की बदल चाहिए कुछ तालिका अपनी मेज का संदर्भ जब तक सब मज़ा और खेल है ...:
CREATE PROCEDURE _cascadeConstraints @database nvarchar(30) = NULL, @table nvarchar(60) = NULL
as
DECLARE @sql nvarchar(255)
WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
BEGIN
select @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @table
select @sql = 'ALTER TABLE ' + tc.TABLE_NAME + ' DROP CONSTRAINT ' + tc.CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc join
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc on
(rc.CONSTRAINT_CATALOG = tc.CONSTRAINT_CATALOG and
rc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME) join
INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc_pk on
(tc_pk.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG and
tc_pk.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME)
where tc.constraint_catalog = @database
and tc_pk.TABLE_NAME = @table
exec sp_executesql @sql
END
go
मैं सिर्फ विदेशी कुंजी हटाने की जरूरत है
DECLARE @database nvarchar(50)
DECLARE @TABLE_NAME nvarchar(250)
DECLARE @CONSTRAINT_NAME nvarchar(250)
DECLARE @sql nvarchar(350)
set @database = 'XXX'
DECLARE db_cursor CURSOR FOR
select TABLE_NAME, CONSTRAINT_NAME from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and CONSTRAINT_TYPE='FOREIGN KEY'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @CONSTRAINT_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
select @sql = 'ALTER TABLE ' + @TABLE_NAME + ' DROP CONSTRAINT ' + @CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @TABLE_NAME
exec sp_executesql @sql
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @CONSTRAINT_NAME
END
CLOSE db_cursor
DEALLOCATE db_cursor
ने उत्तर दिया: http://stackoverflow.com/questions/2247268/t-sql-drop-table-cascade-constraints-equivalent – rizzle