এসকিউএল সার্ভার কোথায় কোনও টেবিলের জন্য শারীরিকভাবে পরিচয় ভ্যালু সংরক্ষণ করে?


12

আমি আশা করছি যে কেউ আমাকে এই দিকে সঠিক দিকে নির্দেশ করতে পারে। এখানে এখন পর্যন্ত আমার কাজ শেষ।

SELECT * FROM sys.identity_columnsএকটি সিস্টেম ভিউ যা "সর্বশেষ_মূল্য" দেয় তবে সেই দৃশ্যের সংজ্ঞাটি একটি অভ্যন্তরীণ ফাংশন ব্যবহার করে IdentityProperty(colName, 'LastValue')- সুতরাং এটি একটি মৃত সমাপ্তি (সেখানে কোনও সিস্টেমের টেবিল থেকে এটি টানছে না)।

ইন্টারনেটে সর্বত্র (আমি দেখেছি) DBCC IDENT_...মানটি উন্মোচন করতে কমান্ডগুলি ব্যবহার করার পরামর্শ দেয় তবে এটি এখনও অন্ধকারে রেখে দেয় যে এটি আসলে কোথায় সঞ্চিত রয়েছে।

সুতরাং, আমি DBCC PAGE(TestDB,1,1325,3)আমার পরীক্ষার জোতা RESEEDডিবির বিপরীতে পৃথক পৃষ্ঠাগুলি সন্ধান করতে এবং কমান্ডটি 10 ​​এবং 12 এর মধ্যে পুনর্নির্মাণ করার জন্য পৌঁছেছি।

এই কাজ, আমি উপর হেক্স মান খেয়াল IAM: Header, IAM: Single Page Allocationsএবং IAM: Extent Alloc Status Slot 1সব পরিবর্তন করেছেন। (এবং উপলব্ধি করা হয়েছে যে তারা বুস 1 মানের সাথে সাথে পর্যায়ক্রমে পরিবর্তিত হয় যা নিজেও ক্রমবর্ধমান পরিবর্তিত হয়)।

সুতরাং আরেকটি মৃত-শেষ এবং আমি সব ধারণার বাইরে। আমি আর কোথায় সন্ধান করতে পারি?

আমি এসকিউএল সার্ভার ২০১৪ চালাচ্ছি intern আমার অভ্যন্তরীণ জ্ঞানের জন্য একটি অতৃপ্ত তৃষ্ণা রয়েছে এবং এখনও এ হিসাবে অধরা হিসাবে কিছু আসতে পারে না। এটি আমার দৃষ্টি আকর্ষণ করেছে কারণ তত্ত্ব অনুসারে, এটি (একটি পরম মান) কোথাও সঞ্চিত এবং এটি (যুক্তিযুক্ত) লোকেশনযোগ্য হওয়া উচিত। অভ্যন্তরীণভাবে সঞ্চিত ডেটা / মেটা ডেটার অদম্য অবস্থানগুলির সন্ধানের জন্য, এই নির্দিষ্ট মানটি আমাকে বিশেষভাবে অধরা হিসাবে আঘাত করে। আমি অনুমান করছি / আশা করছি যে কেউ আসবেন এবং আমাকে বলবেন, আপনি এটি পেতে পারেন DBCC PAGEতবে আমি ভুল জায়গায় খুঁজছিলাম।

উত্তর:


8

আপনি যদি ডিএসি ( ডেডিকেটেড অ্যাডমিনিস্ট্রেটর কনসোল ) অ্যাক্সেস করতে পারেন তবে আপনি কলামটি ইন কলামটি INTদেখে কলামগুলির জন্য সনাক্তকরণ কলামের মূল্য পরীক্ষা করতে পারেন ।idtvalsys.syscolpars

ধন্যবাদ মার্টিন স্মিথ যে টেবিলে আমাকে বিধায়ক জন্য এই খুব দরকারী উত্তর মাধ্যমে দ্বারা রই Gavish এখানে একটি সংশ্লিষ্ট প্রশ্নে।

উদাহরণস্বরূপ, নিম্নলিখিত অস্থায়ী টেবিলটি ধরুন:

USE tempdb;

CREATE TABLE #d
(
    ID INT NOT NULL IDENTITY(1,1)
);

TRUNCATE TABLE #d;

DBCC CHECKIDENT ('#d',RESEED, 2147483635);

INSERT INTO #d DEFAULT VALUES;

সারণীতে কী রয়েছে তা দেখুন:

SELECT *
FROM #d;
+------------+
| ID         |
+------------+
| 2147483635 |
+------------+

সনাক্তকরণের মানটি এই কোডটি দ্বারা পরিদর্শন করা যেতে পারে:

DECLARE @idtval VARBINARY(64);

SELECT @idtval = scp.idtval
FROM sys.syscolpars scp
    INNER JOIN sys.objects o ON scp.id = o.object_id
WHERE o.name LIKE '#d____%'

DECLARE @LittleEndian NVARCHAR(10);
SET @LittleEndian = LEFT(sys.fn_varbintohexstr(@idtval), 10);
SELECT @LittleEndian;
DECLARE @BigEndian NVARCHAR(10) = '0x';
DECLARE @Loop INT = 0;
WHILE @Loop < 4
BEGIN
  SET @BigEndian = @BigEndian + SUBSTRING(@LittleEndian, ((4 - @Loop) * 2) + 1, 2);
  SET @Loop += 1;
END
SELECT CurrentIdentityValue = CONVERT(INT, 
    CONVERT(VARBINARY(32), @BigEndian, 1), 2);
+----------------------+
| CurrentIdentityValue |
+----------------------+
|                      |
| 2147483635           |
+----------------------+

জন্য BIGINTপরিচয় কলাম, আমরা যেমন কোড ব্যবহৃত কিছু ভেরিয়েবল, আকার প্রসারিত করা প্রয়োজন:

CREATE TABLE #dBig
(
    ID BIGINT NOT NULL IDENTITY(1,1)
);

TRUNCATE TABLE #dBig;

DBCC CHECKIDENT ('#dBig',RESEED, 9223372036854775704);

INSERT INTO #dBig DEFAULT VALUES;

SELECT *
FROM #dBig;


DECLARE @idtval VARBINARY(64);

SELECT @idtval = scp.idtval
FROM sys.syscolpars scp
    INNER JOIN sys.objects o ON scp.id = o.object_id
WHERE o.name LIKE '#dBig____%'

DECLARE @LittleEndian NVARCHAR(18);
SET @LittleEndian = LEFT(sys.fn_varbintohexstr(@idtval), 18);
DECLARE @BigEndian NVARCHAR(18) = '0x';
DECLARE @Loop INT = 0;
WHILE @Loop < 8
BEGIN
  SET @BigEndian = @BigEndian + SUBSTRING(@LittleEndian, ((8 - @Loop) * 2) + 1, 2);
  SET @Loop += 1;
END
SELECT CurrentIdentityValue = CONVERT(BIGINT, 
    CONVERT(VARBINARY(32), @BigEndian, 1), 2);

এর জন্য ফলাফল BIGINT:

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