Sql server FreeBCP到SQL Azure投诉表不';不存在
我还尝试使用-D选项将数据库添加到命令行。该连接的默认数据库设置为freetds.conf中唯一的Azure数据库 与SQL Azure的连接似乎很好,否则-我无法让FreeBCP正常工作: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',
$ 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