sql - xp_cmdshell native 错误 208,SQL Server 2008 R2 中的 BCP

标签 sql sql-server-2008-r2 bcp xp-cmdshell

我一直在尝试获取大型多重连接 SELECT 语句的结果,并将查询结果作为 CVS 文件通过电子邮件发送。 我的查询正确并且已通过电子邮件发送,但我在将结果自动导出为 CVS 文件时遇到问题。根据我的阅读,自动导出查询结果的最佳选择是一个名为“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;

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

当我运行这个时,我得到的错误是: “SQLState = S0002,NativeError = 208” “错误 = [Microsoft][SQL Server Native Client 10.0][SQL Server] 对象名称“datex_footprint.Shipments”无效。”

我 100% 肯定 datex_footprint.Shipments 是我尝试测试的数据的正确架构\表访问。

有人看到我在尝试将此结果导出到 CSV 文件时遗漏了什么或做错了什么吗?不过,具体来说,我正在尝试使这个过程自动化。我知道如何将结果导出到 CSV 文件中,但我想在 T-SQL 中执行此操作,这样我就可以按一天中的时间自动生成文件。

如有任何帮助,我们将不胜感激!

最佳答案

[已解决]

我发现我做错了什么。我没有以完整的形式识别 View 。我使用的是“schema.Table/View”,而不是“database.schema.table/view”。 另外,我添加了一个“-S”+@@SERVERNAME 标志——这告诉 BCP 实用程序使用 SQL Server 当前连接的服务器进行查询。

在 T-SQL、SQL Server 2008 中生成 SELECT 查询结果的 CSV 文件的正确代码是:

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;

所以一旦我添加了“FootPrint”。识别数据库,它起作用了。

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

关于sql - xp_cmdshell native 错误 208,SQL Server 2008 R2 中的 BCP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12586987/

相关文章:

sql - 如何更改列的格式以允许报表服务中的 excel 函数

sql - 多表连接查询,Oracle SQL 中带有计数

t-sql - 这可以在没有循环或游标的情况下完成吗

c# - 从存储过程刷新数据

import - 为什么 BCP 会出现 "Valid table name is required for in, out or format"错误?

sql-server - 使用 BCP 将文件输出为 ANSI 为 UTF-8 MSSQL 2012

php - 在sql数据库中的多个表中插入一个条目

sql - 从总时间中减去 30 分钟

mysql - select和where子句中没有主键时的数据获取时间?

sql-server - 批量插入 fmt 文本限定符