master.sys.xp_cmdshell
非常に大きな文字列をエコーするために使用しようとしています。xp_cmdshell は文字列が varchar であると想定しているため、最大でvarchar
約 8000 文字と考えられるのは小さすぎるため、これを達成する方法がわかりません。
私の@MESSAGE
変数は次のように宣言されてNVARCHAR(MAX)
おり、そのすべてが必要です。これが私のコードです:
DECLARE @EXECUTION_STRING NVARCHAR(MAX) = 'ECHO ' + @MESSAGE + ' > "' + @FULL_PATH + '\' + @FILE_NAME + '"'
EXEC master.sys.xp_cmdshell @EXECUTION_STRING
だから、私の質問は; 文字列のタイプが の場合、文字列からファイルへの書き込みを行うにはどうすればよいNVARCHAR(MAX)
ですか?
BCP機能を備えたSPを作成するという@Arunの提案に基づく新しい計画。これまでの私のコードは次のとおりです。
DECLARE @THCIC_OUTPUT_TABLE VARCHAR(255) = '##temp' + CONVERT(VARCHAR(12), CONVERT(INT, RAND() * 1000000))
DECLARE @RESULT INTEGER
DECLARE @THCIC_OUTPUT_EXECUTION_COMMAND NVARCHAR(MAX) = '
CREATE TABLE [' + @THCIC_OUTPUT_TABLE + '] ( CONTENT NVARCHAR(MAX) )
INSERT INTO [' + @THCIC_OUTPUT_TABLE + ']
SELECT @MESSAGE
'
EXECUTE SP_EXECUTESQL @THCIC_OUTPUT_EXECUTION_COMMAND, N'@MESSAGE NVARCHAR(MAX)', @MESSAGE
DECLARE @THCIC_OUTPUT_FILE_WRITE_COMMAND VARCHAR(1000) = '
BCP ”SELECT CONTENT FROM [' + @THCIC_OUTPUT_TABLE + ']"
QUERYOUT "' + @FULL_PATH + '\' + @FILE_NAME + '" -w -T -S ' + @@servername
PRINT @THCIC_OUTPUT_FILE_WRITE_COMMAND
EXECUTE @RESULT = master.sys.xp_cmdshell @THCIC_OUTPUT_FILE_WRITE_COMMAND, NO_OUTPUT
PRINT @RESULT
EXECUTE ( 'DROP TABLE [' + @THCIC_OUTPUT_TABLE + ']' )
したがって、イライラするのは、エラーが表示されるのに、ファイルが書き込まれていないことです。の出力PRINT @THCIC_OUTPUT_FILE_WRITE_COMMAND
は次のとおりです。
BCP ”SELECT CONTENT FROM [##temp878274]"
QUERYOUT "\\TXPDC-FS01\Profiles\cofarmer\My Sandbox\THCIC\Q2_2014\Burleson\PIPSUB2938718184092014251607.txt" -w -T -S TXPDC-STKSQL01
の出力PRINT @RESULT
は次のとおりです。1
私は何を間違っていますか?