【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であらかじめ末尾のスペースを取り除いた上で比較しています。