PowerShellスクリプトでCREATE TABLEステートメントを生成する
SQL Server で CREATE TABLE ステートメントを生成する方法
SSMS のテーブル デザイナーを使用する
- SQL Server Management Studio (SSMS) を開きます。
- オブジェクト エクスプローラーで、テーブルを含むデータベースを展開します。
- テーブルを右クリックし、「デザイン」を選択します。
- テーブル デザイナーで、「ファイル」メニューから、「スクリプトの生成」を選択します。
- 「CREATE TABLE」を選択します。
- 必要に応じて、スクリプト オプションを編集します。
- 「OK」をクリックして、スクリプトを生成します。
T-SQL ステートメントを使用する
以下の T-SQL ステートメントを使用して、CREATE TABLE ステートメントを生成できます。
SELECT
'CREATE TABLE ' + TABLE_NAME + ' (' +
STRING_AGG(
COLUMN_NAME + ' ' + DATA_TYPE +
CASE WHEN IS_NULLABLE = 'YES' THEN ' NULL' ELSE ' NOT NULL' END,
','
) + ')'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your_table_name'
このステートメントは、INFORMATION_SCHEMA.COLUMNS
ビューを使用して、指定されたテーブルの列情報とデータ型を取得します。
$server = 'localhost'
$database = 'your_database_name'
$table = 'your_table_name'
$connection = New-Object Microsoft.Data.SqlClient.SqlConnection("Server=$server;Database=$database;Integrated Security=True")
$connection.Open()
$cmd = New-Object Microsoft.Data.SqlClient.SqlCommand("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table'", $connection)
$reader = $cmd.ExecuteReader()
$columns = @()
while ($reader.Read()) {
$column = New-Object PSObject
$column.Name = $reader['COLUMN_NAME']
$column.DataType = $reader['DATA_TYPE']
$column.IsNullable = $reader['IS_NULLABLE'] -eq 'YES'
$columns += $column
}
$reader.Close()
$connection.Close()
$createTableStatement = "CREATE TABLE $table ("
foreach ($column in $columns) {
$createTableStatement += "`n $column.Name $column.DataType"
if ($column.IsNullable) {
$createTableStatement += " NULL"
} else {
$createTableStatement += " NOT NULL"
}
}
$createTableStatement += "`n)"
Write-Output $createTableStatement
その他のオプション
- データベース エンジン ツール (SSDT) を使用して、テーブルを作成できます。SSDT は、テーブル デザイナーを含む、テーブルの作成と管理のためのグラフィカル インターフェイスを提供します。
- SQL Server Management Objects (SMO) を使用して、プログラムによって CREATE TABLE ステートメントを生成できます。SMO は、SQL Server オブジェクトを操作するための .NET ライブラリです。
これらの方法のいずれを使用しても、既存のテーブルに基づいて CREATE TABLE ステートメントを生成することができます。
PowerShell スクリプト
$server = 'localhost'
$database = 'your_database_name'
$table = 'your_table_name'
$connection = New-Object Microsoft.Data.SqlClient.SqlConnection("Server=$server;Database=$database;Integrated Security=True")
$connection.Open()
$cmd = New-Object Microsoft.Data.SqlClient.SqlCommand("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table'", $connection)
$reader = $cmd.ExecuteReader()
$columns = @()
while ($reader.Read()) {
$column = New-Object PSObject
$column.Name = $reader['COLUMN_NAME']
$column.DataType = $reader['DATA_TYPE']
$column.IsNullable = $reader['IS_NULLABLE'] -eq 'YES'
$columns += $column
}
$reader.Close()
$connection.Close()
$createTableStatement = "CREATE TABLE $table ("
foreach ($column in $columns) {
$createTableStatement += "`n $column.Name $column.DataType"
if ($column.IsNullable) {
$createTableStatement += " NULL"
} else {
$createTableStatement += " NOT NULL"
}
}
$createTableStatement += "`n)"
Write-Output $createTableStatement
例
$server = 'localhost'
$database = 'Northwind'
$table = 'Customers'
$connection = New-Object Microsoft.Data.SqlClient.SqlConnection("Server=$server;Database=$database;Integrated Security=True")
$connection.Open()
$cmd = New-Object Microsoft.Data.SqlClient.SqlCommand("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table'", $connection)
$reader = $cmd.ExecuteReader()
$columns = @()
while ($reader.Read()) {
$column = New-Object PSObject
$column.Name = $reader['COLUMN_NAME']
$column.DataType = $reader['DATA_TYPE']
$column.IsNullable = $reader['IS_NULLABLE'] -eq 'YES'
$columns += $column
}
$reader.Close()
$connection.Close()
$createTableStatement = "CREATE TABLE $table ("
foreach ($column in $columns) {
$createTableStatement += "`n $column.Name $column.DataType"
if ($column.IsNullable) {
$createTableStatement += " NULL"
} else {
$createTableStatement += " NOT NULL"
}
}
$createTableStatement += "`n)"
Write-Output $createTableStatement
このスクリプトを実行すると、以下の出力が出力されます。
CREATE TABLE Customers (
CustomerID int NOT NULL,
CompanyName nvarchar(40) NOT NULL,
ContactName nvarchar(30) NULL,
ContactTitle nvarchar(30) NULL,
Address nvarchar(60) NULL,
City nvarchar(15) NULL,
Region nvarchar(15) NULL,
PostalCode nvarchar(10) NULL,
Country nvarchar(15) NULL,
Phone nvarchar(24) NULL,
Fax nvarchar(24) NULL
)
これは、Northwind
データベースの Customers
テーブルに基づいた CREATE TABLE ステートメントです。
SQL Server で CREATE TABLE ステートメントを生成する方法
SSMS のテーブル デザイナーは、GUI を使用してテーブルを作成および編集するためのツールです。 テーブル デザイナーを使用して CREATE TABLE ステートメントを生成するには、以下の手順に従います。
- SSMS を開き、目的のデータベースに接続します。
- 新しいテーブルを作成するには、新しいテーブル を右クリックして 新しいテーブルを選択 を選択します。 既存のテーブルに基づいて CREATE TABLE ステートメントを生成するには、既存のテーブルを右クリックして スクリプトの生成 を選択します。
- テーブル デザイナー ウィンドウで、テーブルの列とデータ型を定義します。
- ファイル メニューから スクリプトの生成 を選択します。
- スクリプトの生成 ウィンドウで、CREATE TABLE オプションを選択して OK をクリックします。
T-SQL ステートメントを使用する
SELECT
'CREATE TABLE ' + TABLE_NAME + ' (' +
STRING_AGG(
COLUMN_NAME + ' ' + DATA_TYPE +
CASE WHEN IS_NULLABLE = 'YES' THEN ' NULL' ELSE ' NOT NULL' END,
','
) + ')'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your_table_name'
$server = 'localhost'
$database = 'your_database_name'
$table = 'your_table_name'
$connection = New-Object Microsoft.Data.SqlClient.SqlConnection("Server=$server;Database=$database;Integrated Security=True")
$connection.Open()
$cmd = New-Object Microsoft.Data.SqlClient.SqlCommand("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table'", $connection)
$reader = $cmd.ExecuteReader()
$columns = @()
while ($reader.Read()) {
$column = New-Object PSObject
$column.Name = $reader['COLUMN_NAME']
$column.DataType = $reader['DATA_TYPE']
$column.IsNullable = $reader['IS_NULLABLE'] -eq 'YES'
$columns += $column
}
$reader.Close()
$connection.Close()
$createTableStatement = "CREATE TABLE $table ("
foreach ($column in $columns) {
$createTableStatement += "`n $column.Name $column.DataType"
if ($column.IsNullable) {
sql-server scripting dynamic-sql