/********************************
テーブルのデータを使って文字を結合して出力したい
用途は、テーブルデータを別のサーバのテーブルにインサートしたいときに大量にINSERT文を
SELECT出力のときに文字列として出力したい。
例えば
テーブルデータに
041という文字列があったとして、
「INSERT INTO TEST ([CODE],[NAME])VALUES(041, ‘test01’)」
という文字列をSELECTしたときに出力するというもの。
こういった処理はエクセルのマクロでもできるけど、タブとか空白とかが入り込むので
それを削除する(置換)が面倒だったりする。
結局は、手間がかかるのはどちらも同じなので使いやすい方で出力すればOK
*/
test_tableにCODE,NAMEのカラムが存在する。
INSERT文をテーブルのレコードを使って文字として出力して、別の環境にINSERTしたいとする。
テーブルには以下のデータが入っているとする
ID CODE NAME
1 041 test01
2 041 test02
3 041 test03
4 NULL test04
5 NULL test04
1 |
SELECT TOP 10 CAST('INSERT INTO TEST ([CODE],[NAME])VALUES(' as nvarchar)+CODE+', '+NAME,+')' * FROM test_table |
–なぜかカッコと中括弧が正常に表示されてないことがあるので、分解するとうまくいく
–シングルクォーテーションが必要なときは””4つで1つのシングルクォーテーションになる。これは2つが囲みで2つが1つをあらわすので4つで1つ
1 |
SELECT TOP 10 CONVERT(nvarchar,'INSERT INTO TEST ([CODE],[NAME')+CONVERT(nvarchar,'])VALUES(')+CODE+', '+''''+NAME+''''+')' FROM test_table |
–出力例、シングルクォーテーションでNAMEカラムを囲った
–INSERT INTO TEST ([CODE],[NAME])VALUES(041, ‘test01’)
CASTでなくて、CONVERTもある
CONVERT(nvarchar(50),文字列)
CAST(文字列 as nvarchar(50))
ついでにINT変換はこんな感じ。文字列、変換、数字
1 2 3 4 5 |
DECLARE @intTest int SET @intTest = 100 SELECT CONVERT(nvarchar,1234) SELECT CONVERT(nvarchar,@intTest) |