【SQL Server】セミコロン区切りの1行データを複数行に変換する

※SQL Server 2016にて確認

-- 1つのコードに複数のデータが入っているダミーテーブル
with dummyData as (
	select 'AGroup' as code, 'A01;A02;A03' as child
	union
	select 'BGroup' , 'B01;B02;B03'
)

select 
	code,	--元々のコード
	value	--childを;で分割した値が入る
from
	dummyData
	cross apply string_split(child, ';')	--セミコロンで区切る

■実行結果

codevalue
AGroupA01
AGroup A02
AGroup A03
BGroupB01
BGroup B02
BGroup B03

【SQL Server】invoke-sqlcmd で 重複する列名は~ エラーが発生する

■エラー内容

「invoke-sqlcmd : 重複する列名は、SQL PowerShell では許可されません。列を繰り返す場合、重複する列には Column_Name AS New_Name の形式で列の別名を使用します。」

■原因

invoke-sqlcmdの-InputFileで指定したSQLファイルの文字コードがSJISであったために、as句で付与した列別名が文字化けしてしまったために発生していた。

SQLファイルの文字コードをサクラエディタなどでUTF-8に修正したところ、エラーが解消された。

【SQL Server】全角文字が含まれるデータを取得する

SELECT
    *
FROM
    テーブル名
WHERE
    LEN(RTRIM(該当フィールド名)) <> DATALENGTH(RTRIM(該当フィールド名))

※SQL Server2008にて動作確認

解説

LEN(文字数の取得)と、DATALENGTH(バイト数の取得)の結果が異なる場合、全角文字が含まれていると判断しています。
尚、LEN関数は末尾に半角スペースが含まれる場合、1文字分少なくカウントされるため、RTRIMであらかじめ末尾のスペースを取り除いた上で比較しています。