Sql server FreeBCP到SQL Azure投诉表不';不存在

Sql server FreeBCP到SQL Azure投诉表不';不存在,sql-server,azure-sql-database,freetds,freebcp,Sql Server,Azure Sql Database,Freetds,Freebcp,我还尝试使用-D选项将数据库添加到命令行。该连接的默认数据库设置为freetds.conf中唯一的Azure数据库 与SQL Azure的连接似乎很好,否则-我无法让FreeBCP正常工作: $ freebcp DWSTAGE.BCPTEST in bcptest.txt -f cdr.fmt -S serverfromfreetds -U user@azureserver -P password Msg 208, Level 16, State 1 Server 'azureserver',

我还尝试使用-D选项将数据库添加到命令行。该连接的默认数据库设置为freetds.conf中唯一的Azure数据库

与SQL Azure的连接似乎很好,否则-我无法让FreeBCP正常工作:

$ freebcp DWSTAGE.BCPTEST in bcptest.txt -f cdr.fmt -S serverfromfreetds -U user@azureserver -P password
Msg 208, Level 16, State 1
Server 'azureserver', Line 1
    Invalid object name 'DWSTAGE.BCPTEST'.
Msg 208, Level 16
General SQL Server error: Check messages from the SQL Server

Msg 20064, Level 2
Attempt to use Bulk Copy with a non-existent Server table

$ freebcp DATABASENAME.DWSTAGE.BCPTEST in bcptest.txt -f cdr.fmt -S serverfromfreetds -U user@azureserver -P password
Msg 40515, Level 15, State 1
Server 'azureserver', Line 16
    Reference to database and/or server name in 'DATABASENAME.DWSTAGE.BCPTEST' is not supported in this version of SQL Server.
Msg 40515, Level 15
General SQL Server error: Check messages from the SQL Server

Msg 20064, Level 2
Attempt to use Bulk Copy with a non-existent Server table

这似乎有些数据库/模式混乱,但我找不到有效的设置组合。

来自FreeTDS邮件列表:

消息208来自服务器。快速浏览freebcp.c节目 未分析argv[1]。它被复制到一个结构并逐字使用,例如

$ isql serverfromfreetds user@azuredatabasename password
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> SELECT COUNT(*) FROM DWSTAGE.BCPTEST;
+------------+
|            |
+------------+
| 0          |
+------------+
SQLRowCount returns 1
1 rows fetched
SQL> SELECT COUNT(*) FROM DWSTAGE.BCPTESTX;
[ISQL]ERROR: Could not SQLExecute
SQL> 
从%s设置为FMTONLY OFF”,pdata->dbobject)=失败)

我猜您登录的帐户有一个默认值 数据库,并且该数据库不是包含DWSTAGE.BCPTEST的数据库。 Azure服务器拒绝dbname.schema.object语法,而freebcp已拒绝 没有-D选项,因为在Azure之前,每个TDS服务器都接受该选项 语法

您可以使用

                    if (dbfcmd(dbproc, "SET FMTONLY ON select *
作为一种临时解决办法,我认为这将起作用:

    $ freebcp 'select db_name()' queryout /dev/stdout ...
永久性修复将支持-D


是的,该用户的默认数据库可能是master 默认数据库是在odbc配置中设置的,但我错了 在freeetds.conf中没有这样的选项

我们已经不再试图让Linux为这个过程工作了 现在,但我将再次讨论这个问题

我希望这种变通方法不会起作用,因为不支持使用- 实际上,您必须直接连接到数据库,因为 SQLAzure体系结构的本质


是的,你说得对。我忘了

大约一年前,我们添加了DBSETLDBNAME宏作为设置 db lib LOGINREC中的dbname。用于设置登录中的dbname 数据包,无需“使用数据库名”。freebcp可以修改 使用a-D选项支持该功能


看到变化了吗


(在freebcp中添加对-D的支持)

我已经获得了使用Ubuntu 12.04和Azure SQL的
freebcp
。下面是上面提到的对
-D
的支持的答案

首先,我开始安装并配置
freetds
,如本线程所述:

基本上,这包括:
sudo apt get install tdsodbc unixodbc freetds bin

这将我带到了这个线程开始的位置;
freebcp
可以连接,但我得到了关于“引用数据库…此版本的SQL server不支持”的错误

下一步需要注意的是,apt get安装的
freebcp
版本是一个非常旧的版本。相反,请从下载一个更新的版本。我使用了
freetds-1.00.9.tar.gz

使用
/configure
make
安装它,然后使用这个新的
freebcp
-D
一样

这是我的命令字符串:
freetds-1.00/src/apps/freebcp-bcptest-in-bcptest.big.dat-UmyUserName@myServer-S MyServerConfig-P'mypa$$word'-D myDatabase-c-e upload.err

    freebcp DWSTAGE.BCPTEST in bcptest.txt \
    -O 'USE dbname' \
    -f cdr.fmt -S serverfromfreetds -U user@azureserver -P password