2014-10-26 5 views
0

У меня проблемы с BCP. Он продолжает говорить недопустимое имя объекта ## Ярлыки, несмотря на то, что я создал глобальную таблицу. Что я делаю неправильно?Недопустимое имя объекта SQL BCP ## Ярлыки

Код: -

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] Недопустимое имя объекта «## Этикетки.

+0

Вы используете этот скрипт для именованного экземпляра? BCP будет подключаться к локальному экземпляру по умолчанию, если вы не укажете параметр '/ S'. –

+0

Эй, Дэн, нет, это в одном экземпляре. Я просто пишу скрипт с менеджером sql в этом экземпляре, используя учетную запись SA. – codingitup

+0

Является ли экземпляр, в котором вы запускаете скрипт по экземпляру по умолчанию, или это именованный экземпляр? Команда BCP, вызываемая через xp_cmdshell, не знает, из какого экземпляра она была выполнена, поэтому имя сервера/экземпляра должно быть указано, если оно не является экземпляром по умолчанию. –

ответ

0

Утилита командной строки BCP работает независимо от сценария T-SQL, даже если она вызвана через xp_cmdshell. Он подключается к экземпляру по умолчанию на том же сервере, на котором он выполняется, если параметр BCP /S не указывает иначе.

В этом случае глобальная таблица temp была создана в именованном экземпляре, где выполнялся скрипт. Тем не менее, команда BCP, подключенная к экземпляру по умолчанию и глобальной таблице temp, там не существует (к счастью).