SQL BCP无效对象名称##标签

时间:2014-10-26 12:55:12

标签: sql-server tsql bcp

我遇到了BCP问题。尽管我创建了一个全局表,它仍然会说无效的对象名称## Labels。我做错了什么?

代码是: -

DECLARE @SQL varchar(max)       

SET @BatchNo = 'abc123'

DECLARE @test TABLE(A varchar(max),B varchar(max),C varchar(max),D varchar(max),E varchar(max),F varchar(max),G varchar(max),H varchar(max),I varchar(max),J varchar(max))

insert into @test values ('1','2','3','4','5','6','7','8','9','10')

SELECT * INTO ##Labels FROM @test       

SET @SQL = 'SELECT * FROM ##Labels'

DECLARE @TMPfile varchar(25)
DECLARE @folder varchar(128)
DECLARE @LabelDir varchar(128)
DECLARE @template varchar(25)
DECLARE @FinalFile varchar(40)
DECLARE @cmdstr varchar(300)


SET @TMPfile = @BatchNo + '.tmp'                            
--Trigger folder
SET @folder = '\\WIN-0H\LABELLING\XFER\'                            
--Print Directive Folder
SET @LabelDir = '\\WIN-0H\DIR\'
--Label Data Template
SET @template = 'cl.csv'
--Fine output file
SET @FinalFile = @BatchNo + '.CHLABEL'

--Bulk Copy Query to csv temp file
SET @cmdstr = 'bcp "' + @SQL + '" QUERYout ' + @folder + @TMPfile + ' -c -t "," -T'
SELECT * FROM ##Labels
EXEC master..xp_cmdshell @cmdstr 
PRINT @cmdstr 

--join the label csv template to the actual data
SET @cmdstr = 'copy /Y /B ' + @LabelDir + @template + ' + ' + @folder + @TMPfile + ' ' + @folder + @FinalFile
EXEC master..xp_cmdshell @cmdstr
PRINT @cmdstr 

--Remove all temporary files
SET @cmdstr = 'del ' + @folder + @TMPfile
EXEC master..xp_cmdshell @cmdstr 
PRINT @cmdstr 
PRINT 'Im Printing'

DROP TABLE ##Labels

错误消息是:

  

错误= [Microsoft] [SQL Server Native Client 11.0] [SQL Server]无效   对象名称'## Labels'。

1 个答案:

答案 0 :(得分:0)

BCP命令行实用程序独立于T-SQL脚本运行,即使通过xp_cmdshell进行调用也是如此。它连接到它运行的同一服务器上的默认实例,除非BCP /S参数另有指定。

在这种情况下,全局临时表是在运行脚本的命名实例上创建的。但是,连接到默认实例的BCP命令和全局临时表在那里不存在(幸运的是)。