2013-09-10 2 views
2

БКП commnad ниже, не дает никаких ошибокВопросы witht команды BCP при использовании переменных

exec master..xp_cmdshell 'bcp "select RecordType + PaymentYear from CentersApp.dbo.IRS_TRecord"  
queryout "\\w2k3solomon\c$\IRS1099B\IRS_VENDORS.TXT" -T -c -S SOLOMON' 

Однако, когда я использую переменные, чтобы сделать то же самое (смотри ниже), я получаю ошибку 'bcp' is not recognized as an internal or external command

declare @t nvarchar(200) 
    declare @s nvarchar(1000) 


    set @t = '"select RecordType + PaymentYear from CentersApp.dbo.IRS_TRecord"' 
    set @s = '''bcp ' + '"' + @t + '"' + '  queryout "\\w2k3solomon\c$\IRS1099B\IRS_VENDORS.TXT" -T -c -S SOLOMON ''' 

    exec master..xp_cmdshell @s 
+0

Я рекомендую запускать 'выбирать @ s' перед запуском' xp_cmdshell', чтобы убедиться, что вы формирования строка правильно. Если это выглядит нормально, скопируйте его и вставьте в первый пример, где переменные не используются, чтобы увидеть, возвращает ли он ошибку. –

+0

Я уже сделал это. Строка выглядит точно идентичной первой – stackuser

+1

. Вы пытались удалить кавычки, обертывающие переменную @s? это уже строка, поэтому вам не нужно ее обертывать (т.е. «bcp» + ...) – msmucker0527

ответ

1

Изменить

set @s = '''bcp ' + '"' + @t + '"' + '  queryout "\\w2k3solomon\c$\IRS1099B\IRS_VENDORS.TXT" -T -c -S SOLOMON ''' 

до

set @s = 'bcp ' + '"' + @t + '"' + '  queryout "\\w2k3solomon\c$\IRS1099B\IRS_VENDORS.TXT" -T -c -S SOLOMON ' 

она хранится в переменной строкового типа, так что вам не нужно использовать кавычки

+0

Не обязательно объединять «bcp» и «» вместе. Они могут быть частью одной и той же строки. То же самое верно для «» и «queryout ...». Например, 'set @s = 'bcp"' + @t + '"queryout" \\ w2k3solomon \ c $ \ IRS1099B \ IRS_VENDORS.TXT "-T-c -S SOLOMON'' улучшит читаемость. –

+0

Спасибо, да, это был дополнительный набор двойных кавычек, и я удалил его. – stackuser

Смежные вопросы