【问题标题】:FreeBCP to SQL Azure complains table doesn't existFreeBCP 到 SQL Azure 抱怨表不存在
【发布时间】:2012-11-06 02:51:46
【问题描述】:
$ 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

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

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

$ 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> 

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

【问题讨论】:

    标签: sql-server azure-sql-database freetds freebcp


    【解决方案1】:

    我已经得到freebcp 使用 Ubuntu 12.04 和 Azure SQL。它遵循上面的答案,其中提到了对-D 的支持。

    首先我开始安装和配置freetds,如以下线程所述:https://askubuntu.com/questions/167491/connecting-ms-sql-using-freetds-and-unixodbc-isql-no-default-driver-specified

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

    这把我带到了这个线程开始的地方; freebcp 可以连接,但我收到有关“引用数据库...此版本的 SQL 服务器不支持”的错误。

    接下来要注意,apt-get 安装的freebcp 的版本是相当老的版本。而是从ftp://ftp.freetds.org/pub/freetds/stable/ 下载更新的版本。我用freetds-1.00.9.tar.gz

    使用./configuremake 安装它,然后使用这个新的freebcp,但使用-D

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

    【讨论】:

      【解决方案2】:

      来自 FreeTDS 邮件列表:

      消息 208 来自服务器。快速浏览一下 freebcp.c 显示 argv[1] 没有被解析。它被复制到结构中并逐字使用,例如

                          if (dbfcmd(dbproc, "SET FMTONLY ON select *
      

      来自 %s SET FMTONLY OFF", pdata->dbobject) == FAIL)

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

      你可以验证使用

          $ freebcp 'select db_name()' queryout /dev/stdout ...
      

      作为一种临时解决方法,我认为这会起作用:

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

      永久修复将支持 -D。


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

      我们已经不再试图让 Linux 为这个过程工作 现在,但我会重新审视这个。

      我希望解决方法不起作用,因为不支持 USE - 实际上,您确实必须直接连接到数据库,因为 SQL Azure 架构的性质。


      是的,你是对的。我忘记了。

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


      查看变化

      http://gitorious.org/freetds/freetds/commit/4a21ded022405693607e71938d0c6173816f5ff9/diffs/c34afafd2fec4cbba9b245e4f13a5471c6fb8041

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

      【讨论】:

        猜你喜欢
        • 2014-10-17
        • 2020-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-28
        • 1970-01-01
        相关资源
        最近更新 更多