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出力する」の紹介でした。