यह ऐसा लगता है कि यह मेरे जैसा काम करता है, मुझे लगता है कि यह मेरे लिए काम करता है - मुझे विश्वास है कि यह केवल SQL Server 2005 या ऊपर काम करेगा। यहाँ पूर्ण परिदृश्य है:
CREATE TABLE table_name (
id bigint identity not null,
column_name varchar(255) not null,
primary key(id),
unique (column_name)
);
कुछ समय बाद, यह पता चलता है कि इस अनूठी बाधा भी आवश्यक न हो:
टेबल एक स्तंभ पर एक अद्वितीय बाधा, पूर्व के साथ बनाया गया है।
INSERT INTO table_name(column_name) VALUES('col1');
परिणामों में: अद्वितीय कुंजी शर्त 'UQ__table_na__9FA0BA59160F4887' का उल्लंघन। ऑब्जेक्ट 'dbo.table_name' में डुप्लिकेट कुंजी सम्मिलित नहीं कर सकता।
आप इस डाटाबेस के मैनुअल नियंत्रण है और एसक्यूएल चल सकते हैं सीधे पर यह संभव है, बस कार्य करें:
ALTER TABLE table_name DROP CONSTRAINT UQ__table_na__9FA0BA59160F4887;
मेरे मामले में, इन लिपियों विभिन्न वातावरण पर चलने किया गया होगा और चाबी जीता ' टी के समान नाम हैं, इसलिए बाधा को दूर करने के लिए मुझे एसक्यूएल की आवश्यकता है जो टेबल और कॉलम नाम इनपुट के रूप में लेता है और शेष को आंकड़े देता है।
DECLARE @table_name nvarchar(256)
DECLARE @col_name nvarchar(256)
DECLARE @Command nvarchar(1000)
-- set your table and column name here:
SET @table_name = N'table_name'
SET @col_name = N'column_name'
SELECT @Command = 'ALTER TABLE ' + @table_name + ' DROP CONSTRAINT ' + d.name
FROM sys.tables t
JOIN sys.indexes d ON d.object_id = t.object_id AND d.type=2 and d.is_unique=1
JOIN sys.index_columns ic on d.index_id=ic.index_id and ic.object_id=t.object_id
JOIN sys.columns c on ic.column_id = c.column_id and c.object_id=t.object_id
WHERE t.name = @table_name and [email protected]_name
--if you want to preview the generated command before running
SELECT @Command
EXEC sp_executesql @Command;
जो कॉलम पर अद्वितीय बाधा को हटा देता है और डालने की अनुमति देता है।
स्रोत
2013-07-12 18:16:27
यह बहुत करीब है, लेकिन मुझे कॉलम के नाम से फ़िल्टर करने की अनुमति नहीं देता है जहां बाधा लागू होती है। मैं क्वेरी को ट्विक करने का प्रयास करने में कुछ समय बिताऊंगा, धन्यवाद! – Bill
दरअसल, उन लोगों के अलावा बहुत कम बाधाएं हैं जिन्हें मैं छोड़ना चाहता हूं। मैं बस उन सभी को छोड़ने के लिए इसका उपयोग करने जा रहा हूं और मुझे जो कुछ चाहिए उसे दोबारा बनाने के लिए। आपका बहुत बहुत धन्यवाद! – Bill
sysobjects तालिका –