এমএস ডকস পড়ার পরে এখানে ।
একটি বিদেশী কী পরিবর্তন করতে
লেনদেন-এসকিউএল ব্যবহার করে একটি বিদেশী কী সীমাবদ্ধতা সংশোধন করতে আপনাকে প্রথমে বিদ্যমান বিদেশী কী বাধা মুছে ফেলতে হবে এবং তারপরে নতুন সংজ্ঞা দিয়ে পুনরায় তৈরি করতে হবে। আরও তথ্যের জন্য, দেখুন বিদেশী মূল সম্পর্কগুলি মুছুন এবং বৈদেশিক কী সম্পর্ক তৈরি করুন।
আপনার ক্ষেত্রে আমি বিশ্বাস করি যে একটি নতুন এফকে যুক্ত করুন এবং পুরানোটি মুছুন। স্ক্যান অক্ষম করতে আপনি NO CHECK
বিকল্পটি ব্যবহার করতে পারেন
--DROP TABLE T2
--DROP TABLE T1
CREATE TABLE T1 (
[Id] INT,
[NAME] varchar(100), CONSTRAINT [PK_T1] PRIMARY KEY CLUSTERED (id))
CREATE TABLE T2 (
t2_id int,
T1_Id INT NOT NULL
,CONSTRAINT [FK_T2_T1] FOREIGN KEY (T1_Id) REFERENCES T1(Id)
)
CREATE UNIQUE NONCLUSTERED INDEX IX_T1_Id ON T1 (Id)
select
ix.index_id,
ix.name as index_name,
ix.type_desc as index_type_desc,
fk.name as fk_name
from sys.indexes ix
left join sys.foreign_keys fk on
fk.referenced_object_id = ix.object_id
and fk.key_index_id = ix.index_id
and fk.parent_object_id = object_id('T2')
where ix.object_id = object_id('T1');
╔══════════╦════════════╦═════════════════╦══════════╗
║ index_id ║ index_name ║ index_type_desc ║ fk_name ║
╠══════════╬════════════╬═════════════════╬══════════╣
║ 1 ║ PK_T1 ║ CLUSTERED ║ FK_T2_T1 ║
║ 2 ║ IX_T1_Id ║ NONCLUSTERED ║ NULL ║
╚══════════╩════════════╩═════════════════╩══════════╝
ALTER TABLE T2
WITH NOCHECK
ADD CONSTRAINT [FK_T2_T1_NEW] FOREIGN KEY(T1_Id)
REFERENCES T1(Id)
select
ix.index_id,
ix.name as index_name,
ix.type_desc as index_type_desc,
fk.name as fk_name
from sys.indexes ix
left join sys.foreign_keys fk on
fk.referenced_object_id = ix.object_id
and fk.key_index_id = ix.index_id
and fk.parent_object_id = object_id('T2')
where ix.object_id = object_id('T1');
╔══════════╦════════════╦═════════════════╦══════════════╗
║ index_id ║ index_name ║ index_type_desc ║ fk_name ║
╠══════════╬════════════╬═════════════════╬══════════════╣
║ 1 ║ PK_T1 ║ CLUSTERED ║ FK_T2_T1 ║
║ 2 ║ IX_T1_Id ║ NONCLUSTERED ║ FK_T2_T1_NEW ║
╚══════════╩════════════╩═════════════════╩══════════════╝
ALTER TABLE T2
DROP CONSTRAINT FK_T2_T1
select
ix.index_id,
ix.name as index_name,
ix.type_desc as index_type_desc,
fk.name as fk_name
from sys.indexes ix
left join sys.foreign_keys fk on
fk.referenced_object_id = ix.object_id
and fk.key_index_id = ix.index_id
and fk.parent_object_id = object_id('T2')
where ix.object_id = object_id('T1');
╔══════════╦════════════╦═════════════════╦══════════════╗
║ index_id ║ index_name ║ index_type_desc ║ fk_name ║
╠══════════╬════════════╬═════════════════╬══════════════╣
║ 1 ║ PK_T1 ║ CLUSTERED ║ NULL ║
║ 2 ║ IX_T1_Id ║ NONCLUSTERED ║ FK_T2_T1_NEW ║
╚══════════╩════════════╩═════════════════╩══════════════╝
দেখুন কি এটি কাজ করে, আমি যা চেষ্টা করছি তা আরও একটি এফকে যুক্ত করা যাতে নতুনটি তৈরি হওয়া নতুন সূচকের সাথে যুক্ত হয় এবং পুরানো এফকে বাদ দেয়। আমি জানি প্রশ্নটি বিদ্যমানটি বাদ দেওয়ার নয় তবে দেখুন এই বিকল্পটি আপনাকে সহায়তা করবে কিনা।
এছাড়াও, ম্যাক্স ভার্ননের মন্তব্য অনুসারে: "উইথ এনওচেক বিকল্পটি বিদেশী কীটি অপ্টিমাইজারের দ্বারা বিশ্বাসযোগ্য হওয়া থেকে বিরত করবে some পরীক্ষা করে দেখুন "
NOCHECK
শুধুমাত্র সৃষ্টির সময়ে উপেক্ষা করা হবে কিন্তু সততা contraint জোরদার করা সময় কিছু সময়ে এই ফেলেছেন।