BCP ...查询执行错误地返回零行,其中知道数据存在

时间:2011-12-15 14:03:17

标签: sql sql-server-2000 bcp

我编写了一个带有queryout的BCP流程作为选项。结果,查询被执行,结果被(或应该)写入指定的输出文件。 SQL查询分析器(使用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 ... queryout,从视图中检索数据它工作正常。我无法弄清楚为什么更复杂的查询在BCP命令中不起作用。可能在返回结果之前超时,还是BCP不知道如何处理复杂的“连接样式”查询?

1 个答案:

答案 0 :(得分:0)

如果您创建要执行的查询的视图,然后从中进行选择,我发现您通常可以避免使用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