2012-09-25 51 views
2

我一直在努力研究一个大型多重连接的SELECT语句的结果,并将查询结果作为CVS文件发送。 我有正确的查询和电子邮件,但我无法自动导出结果作为CVS文件。从我所阅读的内容来看,自动导出查询结果的最佳选择是一种名为“BCP”的工具。xp_cmdshell本机错误208,SQL Server 2008 R2中的BCP

我试图Management Studio中使用BCP这样的:

USE FootPrint; 

DECLARE @sql VARCHAR(2048); 
DECLARE @dir VARCHAR(50); 

SET @dir = 'C:\Users\bailey\Desktop'; 
SET @sql = 'bcp "SELECT TOP 10 * FROM datex_footprint.Shipments" queryout "' + @dir + '" -c -t, -T'; 

EXEC master..xp_cmdshell @sql; 

足迹是一个特定的数据库的名称,并datex_footprint的模式。 (这不是真正的查询,只是一个测试)。

当我运行它,我得到的错误是: “SQLSTATE = S0002,NativeError = 208” “错误= [微软] [SQL Server本机客户端10.0] [SQL服务器]无效的对象名称datex_footprint.Shipments ”“。

我100%肯定datex_footprint.Shipments是我试图测试的数据的正确模式\表访问。

有没有人看到我失踪或做错尝试将此结果导出到CSV文件?具体来说,我试图自动化这个过程。我知道如何将结果导出到CSV文件中,但我希望在T-SQL中这样做,这样我就可以在一天中的某个时间自动生成文件。

任何帮助,将不胜感激!

回答

3

[求助]

我想通了我做错了什么。我并没有完全确定这个观点。我正在使用“schema.Table/View”,而不是“database.schema.table/view”。 此外,我添加了“-S”+ @@ SERVERNAME标志 - 它告诉BCP实用程序使用SQL Server当前连接的服务器进行查询。

正确的代码来生成在T-SQL一个SELECT查询的结果的CSV文件,SQL Server 2008是:

DECLARE @sql VARCHAR(8000); 

SELECT @sql = 'bcp "SELECT * FROM FootPrint.datex_footprint.Shipments" queryout "C:\Users\bailey\Desktop\FlatTables\YamotoShipping.csv" -c -t, -T -S' + @@SERVERNAME; 

exec master..xp_cmdshell @sql; 

所以一旦我说的 “足迹”。确定数据库,它的工作。

注意:我正在运行SQL Server 2008 R2。

0

我得到了同样的错误,但我用不同的方式解决了它。 我已将默认数据库添加到我的ID,然后BCP开始在我的默认数据库中查找表并处理这些文件。