DAC(Dedicated Administrator Console)にアクセスできる場合、列のID列の値をINT
調べるには、idtval
列を調べますsys.syscolpars
。
ここで関連する質問についてのRoi Gavishによるこの非常に有用な答えを介して私をそのテーブルに案内してくれたMartin Smithに感謝します。
たとえば、次の一時テーブルを使用します。
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 |
+------------+
ID値は次のコードで検査できます。
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
ID列、我々は次のようなコードで使用されるいくつかの変数のサイズを拡張する必要があります。
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 |
+----------------------+