こんばんは、
BULK INSERT を使用する方法ではありませんが、OPENROWSET (BULK ...) 関数を使用する方法はいかがでしょうか。
docs.microsoft.com のドキュメント [1] では OPENROWSET 関数について次のように説明されています。
> OPENROWSET 関数は、テーブル名と同じように、クエリの FROM 句で参照できます。 OPENROWSET 関数は、INSERT、UPDATE、または DELETE ステートメントのターゲット テーブルとしても参照できます。
テキストファイルのフォーマットを定義したフォーマットファイルが別途必要にはなりますが、同ドキュメント「使用例」のセクションでは次のような SQL で タブ区切りや CSV のようなテキストファイルの内容を読み取ることができると説明されています。
SELECT a.* FROM OPENROWSET( BULK 'c:\test\values.txt',
FORMATFILE = 'c:\test\values.fmt') AS a;
今回のご質問のケースでは「変換テーブルを参照し、変換後の値を取得する」とのことですから、上記使用例の SQL を変換テーブルと結合するように発展させ、INSERT ステートメントのターゲットとして参照することで、1 ステップの SQL でコード変換の条件を満たした INSERT ステートメントを実現できます。例えば、最終的にデータを挿入するテーブルを A, 変換テーブルを B と仮定した場合に次のような SQL で同様のことを実現できるかと思います(C と V はソーステキストのエイリアス):
INSERT INTO A
SELECT B.ConvertTo
FROM B
LEFT JOIN (
SELECT * FROM OPENROWSET(
BULK 'C:\Test\Values.csv',
FORMATFILE = 'C:\Test\Values.fmt'
) AS C
) AS V ON B.ConvertFrom = V.Source;
回答中に言及したフォーマットファイルは
bcp ユーティリティ で作成することができます。以下の参考 URL [2] でも、その作成手順が説明されています:
[1] OPENROWSET (Transact-SQL)
https://docs.microsoft.com/ja-jp/sql/t-sql/functions/openrowset-transact-sql
[2] フォーマット ファイルの作成 (SQL Server)
https://docs.microsoft.com/ja-jp/sql/relational-databases/import-export/create-a-format-file-sql-server
最後に、先に返信されている trapemiya さんの投稿は十分にご質問に回答されているように思いますので、参考になった投稿として投票させていただきます。もし、ご不明な点や気にかかることがまだあるようでしたらアップデートください。
--- Seiji Momoto