Azure Synapase Analytics 専用SQLプールを運用していると、ごくまれに「テーブルの列名を変更したい」という要望をいただく事があります。
2020年12月までは、CTAS
を使って、列名を変更した新しいテーブルへ物理的にデータの移動などをやっていたのですが、2020年12月以降にプレビュー版ですが、sp_renameにて列名を変更することが可能になりました。
※ただし、sp_renameで変更できるのはユーザーオブジェクトの列名のみであり、また、Azure Synapase Analytics サーバーレスSQLプールではサポートされていません。
用途
Azure Synapase Analytics 専用SQLプールのユーザーオブジェクトのCOLUMNの名前を変更する。
使い方
sp_rename '<スキーマ名>.<テーブル名>.<カラム名>','<新しいカラム名>','COLUMN'
第一引数には、変更したいカラム名をスキーマ修飾、テーブル名修飾した状態で指定し、第二引数に新しいカラム名を指定します。第三引数はCOLUMN
固定です。
実際に、sp_rename_test
と言うテーブルを作成し、列名をcol1
、col2
、col3
からid
、first_name
、last_name
へ変更してみます。
--テーブルの作成
create table sp_rename_test
(
col1 int
,col2 nvarchar(100)
,col3 nvarchar(100)
);
--カラム名の確認
select
t.name
,c.name column_name
from
sys.tables t inner join sys.columns c on
t.object_id = c.object_id
where
t.name = 'sp_rename_test'
order by
c.column_id
;
上記の通り、作成できたので、カラム名を変更します。
--カラム名の変更
sp_rename 'dbo.sp_rename_test.col1','id','COLUMN'
sp_rename 'dbo.sp_rename_test.col2','first_name','COLUMN'
sp_rename 'dbo.sp_rename_test.col3','last_name','COLUMN'
--カラム名の確認
select
t.name
,c.name column_name
from
sys.tables t inner join sys.columns c on
t.object_id = c.object_id
where
t.name = 'sp_rename_test'
order by
c.column_id
;
備考
ディストリビューション列はカラム名変更ができないので注意が必要です。
--テーブルの作成(COL1をハッシュキー(ディストリビューション列)に指定)
create table sp_rename_test2
(
col1 int
,col2 nvarchar(100)
,col3 nvarchar(100)
)
WITH
( DISTRIBUTION = HASH(col1))
;
--カラム名の変更(col1→id)
sp_rename 'dbo.sp_rename_test2.col1','id','COLUMN'