INFORMATION_SCHEMA.COLUMNSを使ってID列を持つテーブルを特定する
SQL Server で、ID 列を持つテーブルをプログラムで特定するには、いくつかの方法があります。ここでは、最も一般的な 2 つの方法について説明します。
この方法は、sys.tables
と sys.columns
システムテーブルを使用して、ID 列を持つテーブルを特定します。
SELECT
t.name AS TableName,
c.name AS ColumnName
FROM
sys.tables AS t
INNER JOIN
sys.columns AS c ON t.object_id = c.object_id
WHERE
c.is_identity = 1
このクエリは、以下の条件を満たすすべてのテーブルと列を返します。
- テーブルは
sys.tables
システムテーブルに存在する必要があります。 - 列の
is_identity
プロパティは 1 に設定されている必要があります。
この方法は、INFORMATION_SCHEMA.COLUMNS
ビューを使用して、ID 列を持つテーブルを特定します。
SELECT
table_name AS TableName,
column_name AS ColumnName
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
is_identity = 1
- 列は
INFORMATION_SCHEMA.COLUMNS
ビューに存在する必要があります。
C# でのサンプルコード
以下のサンプルコードは、C# で上記のクエリを実行する方法を示しています。
using System;
using System.Data.SqlClient;
namespace SqlServerIdentityColumn
{
class Program
{
static void Main(string[] args)
{
// 接続文字列を指定します。
var connectionString = "Data Source=localhost;Initial Catalog=Test;Integrated Security=True";
// SqlConnection オブジェクトを作成します。
using (var connection = new SqlConnection(connectionString))
{
// SqlCommand オブジェクトを作成します。
using (var command = new SqlCommand("SELECT table_name, column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE is_identity = 1", connection))
{
// SqlConnection オブジェクトを開きます。
connection.Open();
// SqlCommand オブジェクトを実行します。
using (var reader = command.ExecuteReader())
{
// 結果を処理します。
while (reader.Read())
{
var tableName = reader["table_name"].ToString();
var columnName = reader["column_name"].ToString();
Console.WriteLine("{0} テーブルには {1} という ID 列があります。", tableName, columnName);
}
}
}
}
}
}
}
上記以外にも、以下の方法で ID 列を持つテーブルを特定することができます。
- SQL Server Management Studio (SSMS) を使用する
- データベーススキーマを解析するツールを使用する
using System;
using System.Data.SqlClient;
namespace SqlServerIdentityColumn
{
class Program
{
static void Main(string[] args)
{
// 接続文字列を指定します。
var connectionString = "Data Source=localhost;Initial Catalog=Test;Integrated Security=True";
// SqlConnection オブジェクトを作成します。
using (var connection = new SqlConnection(connectionString))
{
// SqlCommand オブジェクトを作成します。
using (var command = new SqlCommand("SELECT table_name, column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE is_identity = 1", connection))
{
// SqlConnection オブジェクトを開きます。
connection.Open();
// SqlCommand オブジェクトを実行します。
using (var reader = command.ExecuteReader())
{
// 結果を処理します。
while (reader.Read())
{
var tableName = reader["table_name"].ToString();
var columnName = reader["column_name"].ToString();
Console.WriteLine("{0} テーブルには {1} という ID 列があります。", tableName, columnName);
}
}
}
}
}
}
}
このコードは、以下の処理を行います。
- 接続文字列を使用して、
Test
データベースへの接続を確立します。 - 取得した列のテーブル名と列名を出力します。
コードの説明
using
ステートメントを使用して、SqlConnection
とSqlCommand
オブジェクトを確実に破棄します。reader.Read()
メソッドを使用して、クエリ結果の各行を処理します。reader["table_name"]
とreader["column_name"]
インデクサーを使用して、テーブル名と列名を取得します。Console.WriteLine()
メソッドを使用して、テーブル名と列名を出力します。
実行方法
このコードを実行するには、Visual Studio などの C# 開発環境でプロジェクトを作成し、上記のコードを貼り付けて実行します。
注意事項
- このコードは、サンプルコードであり、そのまま本番環境で使用することはできません。
- 接続文字列は、実際の環境に合わせて変更する必要があります。
- ID 列の値を取得するには、
SCOPE_IDENTITY()
関数を使用することができます。
SQL Server で ID 列を持つテーブルを特定するその他の方法
SELECT
t.name AS TableName,
c.name AS ColumnName
FROM
sys.tables AS t
INNER JOIN
sys.indexes AS i ON t.object_id = i.object_id
INNER JOIN
sys.columns AS c ON i.object_id = c.object_id AND i.column_id = c.column_id
WHERE
i.is_primary_key = 1
AND i.is_unique = 1
AND c.is_identity = 1
- インデックスは主キーである必要があります。
- 列は ID 列である必要があります。
方法 4:SSMS を使用する
- SSMS を起動します。
- オブジェクトエクスプローラーで、データベースを展開します。
- テーブル フォルダーを展開します。
- テーブルを右クリックし、プロパティ を選択します。
- 列 ページを選択します。
- Is Identity 列で True に設定されている列を確認します。
Toad for SQL Server などのデータベーススキーマ解析ツールを使用して、ID 列を持つテーブルを特定することもできます。
これらのツールは、データベーススキーマを視覚的に表示したり、さまざまな条件でテーブルを検索したりすることができます。
sql-server t-sql metadata