我试图用来master.sys.xp_cmdshell
回显一个非常大的字符串。我相信我认为大约 8000 个字符的最大值varchar
太小了,所以我不确定如何实现这一点,因为 xp_cmdshell 期望字符串是 varchar。
我的@MESSAGE
变量被声明为NVARCHAR(MAX)
,我需要它的每一点。这是我的代码:
DECLARE @EXECUTION_STRING NVARCHAR(MAX) = 'ECHO ' + @MESSAGE + ' > "' + @FULL_PATH + '\' + @FILE_NAME + '"'
EXEC master.sys.xp_cmdshell @EXECUTION_STRING
所以,我的问题是;当字符串是类型时,如何完成字符串到文件写入NVARCHAR(MAX)
?
新计划,基于@Arun 的建议,即创建具有 BCP 功能的 SP。到目前为止,这是我的代码:
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
我究竟做错了什么?