SQL Server BCP命令未将NVARCHAR(MAX)变量内容写入文件



我对SQL Server的BCP有问题。我没有收到错误消息,但该命令也没有向指定的路径写入任何内容。

这是我的代码:

在这种情况下,下面代码中唯一没有考虑的变量是@MESSAGE,它是NVARCHAR(MAX),将占用大部分空间,因此VARCHAR(8000)几乎不够大。

DECLARE @OUTPUT_TABLE VARCHAR(255) = '##temp' + CONVERT(VARCHAR(12), CONVERT(INT, RAND() * 1000000))
DECLARE @RESULT INTEGER
DECLARE @OUTPUT_EXECUTION_COMMAND NVARCHAR(MAX) = 'CREATE TABLE [' + @OUTPUT_TABLE + '] ( CONTENT NVARCHAR(MAX) )
                                                    INSERT INTO [' + @OUTPUT_TABLE + ']
                                                        SELECT @MESSAGE'
EXECUTE SP_EXECUTESQL @OUTPUT_EXECUTION_COMMAND, N'@MESSAGE NVARCHAR(MAX)', @MESSAGE
DECLARE @OUTPUT_FILE_WRITE_COMMAND VARCHAR(1000) = 'BCP ”SELECT CONTENT FROM [' + @OUTPUT_TABLE + ']"
                                                      QUERYOUT "' + @FULL_PATH + '' + @FILE_NAME + '" -w -T -S ' + @@servername 
PRINT @OUTPUT_FILE_WRITE_COMMAND
EXECUTE @RESULT = master.sys.xp_cmdshell @OUTPUT_FILE_WRITE_COMMAND, NO_OUTPUT
PRINT @RESULT
EXECUTE ( 'DROP TABLE [' + @OUTPUT_TABLE + ']' )

所以,令人沮丧的是,我收到了一个错误,但我的文件没有被写入。

PRINT @OUTPUT_FILE_WRITE_COMMAND的输出为:

BCP ”SELECT CONTENT FROM [##temp878274]"
QUERYOUT "\TXPDC-FS01ProfilescofarmerMy SandboxTHCICQ2_2014BurlesonPIPSUB2938718184092014251607.txt" -w -T -S TXPDC-STKSQL01

PRINT @RESULT的输出为:1

然而,什么都没写。我做错了什么?

问题似乎是@OUTPUT_FILE_WRITE_COMMAND中的换行符(以及错误的双引号)。删除换行符对我有效:

DECLARE @OUTPUT_FILE_WRITE_COMMAND VARCHAR(1000) = 'BCP "SELECT CONTENT FROM [' + @OUTPUT_TABLE + ']" QUERYOUT "' + @FULL_PATH + '' + @FILE_NAME + '" -w -T -S ' + @@servername 

结果:0,文件已创建。

最新更新