我遇到了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'。
答案 0 :(得分:0)
BCP命令行实用程序独立于T-SQL脚本运行,即使通过xp_cmdshell进行调用也是如此。它连接到它运行的同一服务器上的默认实例,除非BCP /S
参数另有指定。
在这种情况下,全局临时表是在运行脚本的命名实例上创建的。但是,连接到默认实例的BCP命令和全局临时表在那里不存在(幸运的是)。