BCP ... выполнение запроса ошибочно возвращает ноль строк, в которых известно, что данные существуют - PullRequest
0 голосов
/ 15 декабря 2011

Я написал процесс BCP с запросом в качестве опции.В результате выполняется запрос, и результаты записываются (или должны быть) в указанный выходной файл.Используемый запрос был подтвержден в SQL Query Analyzer (с использованием MS SQL 2000) для генерации известного набора результатов.

Однако, когда я выполняю пакетный файл с помощью команды BCP, он возвращает ноль строкполучить ответ "0 строк скопировано").Однако я могу взять этот запрос и запустить его вне процесса BCP (в анализаторе запросов) и получить 42 745 строк.Я также могу создать представление и выполнить более простой запрос и заставить его работать, используя опцию BCP ... queryout.Я использую запрос, объединяющий информацию из двух таблиц:

bcp "select obj_id, loc_code, CONVERT(VARCHAR(20), create_date, 20) AS build_date, 
model_id, (len(build_string)/4) as feature_count, build_string
from my_db..builds a, my_db..models b
where a.model_id = b.model_id and obj_id like '_________C%' and obj_id not like '1G0%'" queryout z:\test.txt -U %1 -P %2 -S SQLSVR\VM_PROD -c

Как видите, запрос является более сложным, чем "select * from my_db..builds".По сути, если я создаю представление с использованием более сложного запроса, а затем запускаю запрос bcp ... с простым, как уже отмечалось, простым запросом, чтобы извлечь данные из представления, он работает нормально.Я не могу понять, почему более сложный запрос не работает в команде BCP.Может ли это быть тайм-аут перед возвратом результатов, или BCP не знает, как обрабатывать сложный запрос «в стиле соединения»?

1 Ответ

0 голосов
/ 06 марта 2015

Я считаю, что вы обычно можете избежать проблем с утилитой bcp, если создадите представление запроса, который хотите выполнить, а затем выберите из него.В этом случае:

CREATE VIEW [MyOutputView] as
select obj_id, loc_code, CONVERT(VARCHAR(20), create_date, 20) AS build_date,
...
...
and obj_id not like '1G0%'
GO

Тогда команда bcp становится:

bcp "SELECT * FROM MyDb.dbo.MyOutputView" queryout z:\test.txt -U %1 -P %2 -S SQLSVR\VM_PROD -c
...