একটি রো_জিইউডি কলামের উদ্দেশ্য কী?


18

আমি অ্যাডভেঞ্চার ওয়ার্কস ২০১২ ডাটাবেসে প্রায় খনন করেছি এবং কয়েকটি টেবিলে ব্যবহৃত Row_GUID দেখুন।

আমার প্রশ্নের 2 টি অংশ রয়েছে:

কখন আমাকে একটি Row_GUID কলাম অন্তর্ভুক্ত করা উচিত?

একটি Row_GUID কলামের ব্যবহার এবং সুবিধা কী?

উত্তর:


25

ROWGUIDCOLপ্রাথমিকভাবে MERGE প্রতিরূপের জন্য ব্যবহৃত হয় , এবং এটির জন্যও প্রয়োজনীয় হয়FILESTREAM তবে আপনি যে কোনও দৃশ্যে ব্যবহার করতে পারেন যেখানে আপনি অপরিবর্তনীয় কলামটি প্রাথমিক কী থেকে আলাদা করতে চান (উদাহরণস্বরূপ যেখানে প্রাথমিক কী মান পরিবর্তন করতে পারে তবে আপনি এখনও হতে চান পরিবর্তনের আগে এবং পরে কোন সারিটি ছিল তা বলতে সক্ষম)।

USE tempdb;
GO

CREATE TABLE dbo.example
(
  name sysname PRIMARY KEY, 
  rowguid uniqueidentifier NOT NULL DEFAULT NEWID() ROWGUIDCOL
);

INSERT dbo.example(name) VALUES(N'bob'),(N'frank');

SELECT * FROM dbo.example;

UPDATE dbo.example SET name = N'pat' WHERE name = N'bob';
UPDATE dbo.example SET name = N'bob' WHERE name = N'frank';

SELECT * FROM dbo.example;

DROP TABLE dbo.example;

এখন, যদি প্রতিলিপি, বা আপনার অ্যাপ্লিকেশন, বা আপনি কী মনোযোগ দিচ্ছেন, তা লক্ষ্য করবে:

এখানে চিত্র বর্ণনা লিখুন

দেখুন এখানে , এখানে , এবং "স্ন্যাপশট বিবেচ্য বিষয়" বিভাগে এখানে আরও তথ্যের জন্য।


প্রতিলিপিযুক্ত টেবিলগুলিতে একটি ROWGIDCOLUMN যুক্ত করা নিশ্চিত করে যে প্রতিলিপি ইঞ্জিন একই প্রাথমিক কী মানগুলির সাথে রেকর্ডের মধ্যে পার্থক্য করতে ROWGIDCOLUMN ক্ষেত্রটি ব্যবহার করতে পারে। - প্রচুর টার্নার - stackoverflow.com/questions/4443036/...
Yevgraf Andreyevich Zhivago

2
@ ইয়্যাভগ্রাফআন্দ্রেয়েভিচ জিভাগো দুটি সারি কীভাবে একই প্রাথমিক কী মান থাকতে পারে? আপনি কি প্রার্থী (তবে স্পষ্টভাবে সংজ্ঞায়িত না ) কীগুলি বলতে চাচ্ছেন ?
অ্যারন বার্ট্র্যান্ড

13

কলামটিকে ROWGUIDCOLএটির মাধ্যমে উল্লেখ করার অনুমতি দেয়$ROWGUID প্রশ্নের । এটি কোয়েরিকে আরও জেনেরিক তৈরি করার অনুমতি দেয় যেহেতু প্রতিটি টেবিল অনুযায়ী আপনার "অনন্য" কলামটি কী হবে (যথাক্রমে @ অ্যারন এবং @ মার্টিন দ্বারা উল্লিখিত রেপ্লিকেশন এবং ফাইল স্ট্রিমের মতো বৈশিষ্ট্যগুলির জন্য এটি বেশ কার্যকর) )। আপনার অ্যাপ্লিকেশন স্তরে বা ডায়নামিক এসকিউএল এমনকি এমন কোনও কোয়েরি তৈরি করা যেতে পারে, যা SELECT $ROWGUID AS [ID] FROM {table_name}টেবিলের একটি তালিকাতে পুনরাবৃত্তি করার মতো কিছু করে।

কেবল মনে রাখবেন যে ROWGUIDCOLপদবীটি স্বতন্ত্রতা প্রয়োগ করে না । আপনার এখনও এটিকে প্রয়োগ করতে হবে একটি প্রাথমিক কী, একটি অনন্য সূচক বা কোনও অনন্য বাধা via বা এই বিকল্পটি কলামটি অপরিবর্তনীয় তা প্রয়োগ করে না। তার জন্য আপনার একটি AFTER UPDATEট্রিগার বা কলাম স্তর স্তরের অনুমতি প্রয়োজনDENY UPDATE

উদাহরণ স্বরূপ:

SET NOCOUNT ON;
CREATE TABLE #RowGuidColTest
(
  ID UNIQUEIDENTIFIER NOT NULL DEFAULT (NEWID()) ROWGUIDCOL,
  SomeValue INT
);

INSERT INTO #RowGuidColTest (SomeValue) VALUES (12), (14), (1231);

DECLARE @Search UNIQUEIDENTIFIER;

SELECT TOP (1) @Search = $ROWGUID
FROM   #RowGuidColTest;

SELECT @Search AS [@Search]

SELECT *, $ROWGUID AS [$ROWGUID]
FROM   #RowGuidColTest;

SELECT *
FROM   #RowGuidColTest
WHERE  $ROWGUID = @Search;

-- No enforced uniqueness without a PK, Unique Index, or Unique Constraint.
UPDATE tmp
SET    $ROWGUID = @Search
FROM   #RowGuidColTest tmp

SELECT *
FROM   #RowGuidColTest
WHERE  $ROWGUID = @Search;

এর মতো কিছু ফেরত দেয়:

@Search
E7166D18-5003-4D20-8983-E2402472CF82


ID                                      SomeValue    $ROWGUID
E7166D18-5003-4D20-8983-E2402472CF82    12           E7166D18-5003-4D20-8983-E2402472CF82
44FD48A4-AF38-41BF-AE4E-8A12D26B5B57    14           44FD48A4-AF38-41BF-AE4E-8A12D26B5B57
2D50C5C7-1E43-4ADA-A03B-ED202FC88D20    1231         2D50C5C7-1E43-4ADA-A03B-ED202FC88D20


ID                                      SomeValue
E7166D18-5003-4D20-8983-E2402472CF82    12


ID                                      SomeValue
E7166D18-5003-4D20-8983-E2402472CF82    12
E7166D18-5003-4D20-8983-E2402472CF82    14
E7166D18-5003-4D20-8983-E2402472CF82    1231

একইভাবে, $IDENTITYএকটি IDENTITYকলাম রয়েছে এমন টেবিলগুলির জন্য কেউ ব্যবহার করতে পারে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.