नोट: Azure SQL डेटाबेस v12 के रूप में, ये प्रतिबंध अब लागू नहीं होते हैं।
'प्राथमिक सूचकांक' जैसी कोई चीज नहीं है। Key प्राइमरी की ’जैसी कोई चीज होती है और ered क्लस्टर इंडेक्स’ जैसी कोई चीज भी होती है। विकृत अवधारणाएं, अक्सर भ्रमित होती हैं। इस अंतर को ध्यान में रखते हुए, प्रश्न को फिर से देखें:
Q1) SQL Azure टेबल में क्लस्टर किए गए इंडेक्स को संशोधित किया जा सकता है?
A: हाँ। उपयोग करें WITH (DROP_EXISTING=ON)
:
create table Friend (
UserId int not null,
Id int not null);
go
create clustered index cdxFriend on Friend (UserId, Id);
go
create clustered index cdxFriend on Friend (Id, UserId) with (drop_existing=on);
go
Q2) क्या एक प्राथमिक कुंजी बाधा वाली तालिका का क्लस्टर इंडेक्स संशोधित किया जा सकता है?
एक: हाँ, ऊपर के रूप में ही, जब तक प्राथमिक कुंजी बाधा क्लस्टर सूचकांक के माध्यम से लागू नहीं किया जाता है:
create table Friend (
UserId int not null,
Id int not null identity(1,1),
constraint pk_Friend primary key nonclustered (Id));
create clustered index cdxFriend on Friend (UserId, Id);
go
create clustered index cdxFriend on Friend (Id, UserId) with (drop_existing=on);
go
Q3) क्या किसी तालिका के प्राथमिक प्रमुख अवरोध को संशोधित किया जा सकता है?
एक: हाँ, जब तक कि प्राथमिक अवरोध क्लस्टर के माध्यम से लागू नहीं किया जाता है:
create table Friend (
UserId int not null,
Id int not null identity(1,1),
constraint pk_Friend primary key nonclustered (Id));
go
create clustered index cdxFriend on Friend (UserId, Id);
go
alter table Friend drop constraint pk_Friend;
alter table Friend add constraint pk_Friend primary key nonclustered (UserId)
go
Q4) क्या तालिका की प्राथमिक कुंजी को संशोधित सूचकांक के माध्यम से लागू किए जाने पर संशोधित किया जा सकता है?
एक: हाँ, अगर तालिका में कभी कोई पंक्तियाँ नहीं थीं:
create table Friend (
UserId int not null,
Id int not null identity(1,1),
constraint pk_Friend primary key clustered (UserId, Id));
go
alter table Friend drop constraint pk_Friend;
alter table Friend add constraint pk_Friend primary key clustered (Id, UserId)
go
Q5) क्या तालिका के प्राथमिक कुंजी को संशोधित किया जा सकता है, जब तालिका पॉप्युलेट होने पर क्लस्टर इंडेक्स के माध्यम से लागू किया जाता है?
A: नहीं। कोई भी ऑपरेशन जो पॉप्युलेट किए गए क्लस्टर इंडेक्स को हीप में परिवर्तित करता है, वह SQL Azure में ब्लॉक हो जाएगा, भले ही टेबल खाली हो :
create table Friend (
UserId int not null,
Id int not null identity(1,1),
constraint pk_Friend primary key clustered (UserId, Id));
go
insert into Friend (UserId) values (1);
delete from Friend;
go
alter table Friend drop constraint pk_Friend;
एक साइड नोट के रूप में: यदि टेबल को काट दिया जाता है, तो बाधा को संशोधित किया जा सकता है ।
पॉपुलेटेड टेबल के पीके अड़चन को बदलने के लिए अच्छी पुरानी sp_rename
चाल है:
create table Friend (
UserId int not null,
Id int not null identity(1,1),
constraint pk_Friend primary key clustered (UserId, Id));
go
insert into Friend (UserId) values (1);
go
create table FriendNew (
UserId int not null,
Id int not null identity(1,1),
constraint pk_Friend_New primary key clustered (Id, UserId));
go
set identity_insert FriendNew on;
insert into FriendNew (UserId, Id)
select UserId, Id
from Friend;
set identity_insert FriendNew off;
go
begin transaction
exec sp_rename 'Friend', 'FriendOld';
exec sp_rename 'FriendNew', 'Friend';
commit;
go
sp_help 'Friend';
sp_rename
दृष्टिकोण सबसे महत्वपूर्ण बात यह है कि मेज पर अनुमतियाँ नाम बदलने के साथ-साथ विदेशी कुंजी की कमी के दौरान आपके साथ नहीं है, कुछ मुद्दे हैं।