SQLServerでTransact-SQLからCSV出力する
Transact-SQLステートメントからCSVを出力する方法を紹介します。
コーディング例
BEGIN
DECLARE @SERVER VARCHAR(MAX) = 'localhost\MSSQL';
DECLARE @DATABASE VARCHAR(MAX) = 'TestDB';
DECLARE @USER_ID VARCHAR(MAX) = 'sa';
DECLARE @PASSWORD VARCHAR(MAX) = 'PASS';
DECLARE @OUTFILE VARCHAR(MAX) = 'C:\test.csv';
DECLARE @Items VARCHAR(MAX) = 'AAA,BBB,CCC,DDD,EEE';
DECLARE @SQL VARCHAR(8000) = '';
SELECT
@SQL += 'SET NOCOUNT ON;'
,@SQL += 'SELECT'
,@SQL += ' value '
,@SQL += 'FROM'
,@SQL += ' STRING_SPLIT(''{ITEMS}'','','')'
,@SQL += ';'
,@SQL = REPLACE(@SQL,'{ITEMS}',@Items);
;
DECLARE @CMD VARCHAR(8000) = '';
SELECT
@CMD += 'SQLCMD'
,@CMD += ' -S{SERVER}'
,@CMD += ' -d{DATABASE}'
,@CMD += ' -U{USER_ID}'
,@CMD += ' -P{PASSWORD}'
,@CMD += ' -q "{SQL}"'
,@CMD += ' -s, -W -h -1'
,@CMD += ' -o {FILE}'
,@CMD = REPLACE(@CMD,'{SERVER}' ,@SERVER)
,@CMD = REPLACE(@CMD,'{DATABASE}',@DATABASE)
,@CMD = REPLACE(@CMD,'{USER_ID}' ,@USER_ID)
,@CMD = REPLACE(@CMD,'{PASSWORD}',@PASSWORD)
,@CMD = REPLACE(@CMD,'{SQL}' ,@SQL)
,@CMD = REPLACE(@CMD,'{FILE}' ,@OUTFILE)
;
EXEC sp_configure 'show advanced options',1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE;
EXEC master..xp_cmdshell @CMD;
END
実行結果
test.csv
| AAA BBB CCC DDD EEE |
43行目のxp_cmdshellでWindowsコマンドを実行しています。
xp_cmdshellはデフォルトでは使用できませんので、38行目~41行目で使用できるように設定を変更しています。
出力先のパスはSQLServerがインストールされたPC上のパスを指定する必要があります。
以上、「SQLServerでTransact-SQLからCSV出力する」の紹介でした。








