データベース

データベースに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Microsoft SQL Server)
IDENTITY指定時の、初期値、増減値の取得手順を教えてください
投稿日時: 18/02/13 16:04:30
投稿者: 富山の初心者

よろしくお願いします。
 
下記SQLでテーブルを作成
create table A_AAA(
ID Decimal (8,0) NOT NULL IDENTITY (2,3),
DT1 char (4) ,
DT2 char (4) ,
PRIMARY KEY (ID) )
 
下記SQLでIDENTITYが指定されているか否か?の取得ができます。
Select TBL.name
      ,COL.name
      ,(CASE WHEN 128 <= COL.status AND COL.status <= 255 THEN 'Identityあり' ELSE '' END)
  From sysobjects TBL
  LEFT JOIN syscolumns COL ON TBL.id = COL.id
 Where TBL.name = 'A_AAA'
 Order by TBL.name,COL.colid
 
ここで質問ですが、初期値、増減値の取得手順を教えていただけませんか?
上記の場合初期値は「2」、増減値「3」となります。
 

回答
投稿日時: 18/02/14 13:43:06
投稿者: sk

引用:
Microsoft SQL Server

引用:
sysobjects

実行環境の SQL Server のバージョンは何でしょうか。

投稿日時: 18/02/14 17:47:38
投稿者: 富山の初心者

DBMS名:Microsoft SQL Server
バージョン情報:10.50.1600
です。
 
よろしくお願いします。
 

投稿日時: 18/02/14 18:02:29
投稿者: 富山の初心者

エディションは2008R2です。
 
よろしくお願いします。

回答
投稿日時: 18/02/14 18:17:21
投稿者: sk

引用:
DBMS名:Microsoft SQL Server
バージョン情報:10.50.1600
です。

SQL Server 2008 R2 ですね。
 
引用:
IDENTITYが指定されている

引用:
初期値、増減値の取得手順

sys.identity_columns ビューから参照する。
 
(実行例)
---------------------------------------------------------------
SELECT t1.name AS schema_name,
       t2.name AS table_name,
       t3.name AS column_name,
       t3.is_identity,
       t4.seed_value,
       t4.increment_value
FROM sys.schemas AS t1
INNER JOIN sys.objects AS t2
ON t1.schema_id = t2.schema_id
INNER JOIN sys.all_columns AS t3
ON t2.object_id = t3.object_id
INNER JOIN sys.identity_columns AS t4
ON t3.object_id = t4.object_id
AND t3.column_id = t4.column_id
WHERE t2.name = 'A_AAA'
  AND t3.is_identity = 1;
---------------------------------------------------------------
 
IDENT_SEED 関数や IDENT_INCR 関数を使用する。
 
(実行例)
---------------------------------------------------------------
SELECT t1.name AS schema_name,
       t2.name AS table_name,
       t3.name AS column_name,
       t3.is_identity,
       IDENT_SEED(t2.name) AS seed_value,
       IDENT_INCR(t2.name) AS increment_value
FROM sys.schemas AS t1
INNER JOIN sys.objects AS t2
ON t1.schema_id = t2.schema_id
INNER JOIN sys.all_columns AS t3
ON t2.object_id = t3.object_id
WHERE t2.name = 'A_AAA'
  AND t3.is_identity = 1;
---------------------------------------------------------------
 
以上のいずれかでどうぞ。

投稿日時: 18/02/15 12:48:24
投稿者: 富山の初心者

sk様 すばやい回答ありがとうございます。
 
sys.identity_columns ビューから参照する。
IDENT_SEED 関数や IDENT_INCR 関数を使用する。
の両方ともに、想定通りの結果がでました。
 
解決とさせていただきます。