使用Ubuntu系统来运行sqlcmd和bcp命令

敬愛的优秀的Web工程师们,大家好。我知道你们可能不相信有日本语言表的系统,但是我想告诉你们一个好消息:Microsoft♡Linux。微软不仅为Linux提供了支持,还提供了能在Linux上运行的SQL Server工具——bcp和sqlcmd。

我想尝试使用Ubuntu的bcp命令将数据导出为CSV文件,然后将CSV文件导入到表中。当然,数据库名、表名和列名都是用日语。

我计划在Ubuntu环境中尝试使用bcp命令和sqlcmd命令。

环境

服务器

    • Windows2012R2 評価版

 

    • SQLServer 2016 Express Edition

データベース名 日本語システム
テーブル名 タイトル
カラム名 タイトルno,タイトル

客户

    • Ubuntu 16.04.2 LTS (x86_64)

 

    • 下記のパッケージがInstall済み

msodbcsql
unixodbc-dev
mssql-tools

请参考使用Microsoft官方驱动程序通过Ubuntu安装和访问SQL Server的方式,例如安装msodbcsql和mssql-tools。

不能使用bcp命令,但可以使用sqlcmd命令。

总结来说,如果数据库名称和表名是日语,将无法使用。
无论是使用sqlcmd,还是使用日语数据库名称或日语表名,都没有问题。

如果是在BCP的情况下,只有列名是日语的情况下,可以将其导出为CSV文件。

做实验

如果是以日语为名的数据库名和日语表名的情况下。

我尝试使用日文给数据库命名,并使用日文给表命名。然后,我将尝试使用bcp命令导出它。

$ sqlcmd -S IPAddr -U sa -P Password
1> use 日本語システム
2> go
データベース コンテキストが '日本語システム' に変更されました。
1> select * from 名前
2> go
ID          名前
----------- --------------------
          1 yusuke
          2 Microsoft love Linux

$ bcp 日本語システム.dbo.名前 out name.csv -c -t ',' -S IPAddr -U sa -P Passowrd
SQLState = 37000, NativeError = 4060
Error = [unixODBC][Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Sn�▒g▒BU▒_▒▒▒▒▒▒ "日本語システム" ▒▒Q~[▒�▒k1WW~W_
SQLState = 28000, NativeError = 18456
Error = [unixODBC][Microsoft][ODBC Driver 13 for SQL Server][SQL Server]▒▒▒▒ 'sa' o�▒gM~[▒gW_

在连接时出现了奇怪的乱码,并且操作失败了。
当我在执行 SQLState = 37000, NativeError = 4060 SQL State = 28000, NativeError = 18456 进行搜索时,出现了连接错误的样子,但我只能认为是因为日语的数据库名和表名导致无法连接。

因此,我决定创建下面的表格并再次进行导出尝试。

将以日语为列名的表导出

~$ sqlcmd -S IPAddr -U sa -P Password
1> use test1
2> select * from namelist
3> go
データベース コンテキストが 'test1' に変更されました。
ID          名前
----------- --------------------
          1 yusuke
          2 Microsoft love Linux

如下所示,它能够正常运行。

$ bcp test1.dbo.namelist out name.csv -c -t ',' -S IPAddr -U sa -P Password

Starting copy...

4 rows copied.
Network packet size (bytes): 4096

以下的内容没有问题。

$ cat name.csv
1,yusuke
2,Microsort love Linux

在Windows Server中,有没有bcp命令可用?

可以无障碍地导入日语的数据库名称和日语的表格名称。

PS > cat .\name.csv
1,yusuke

PS > bcp 日本語システム.dbo.名前 in c:\users\administrator\name.csv -c -t ',' -S localhost -T

コピーを開始しています...

1 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 15     平均 : (66.67 行/秒)
PS >

请参考以下网站

BCP实用工具

SQL Server的BCP命令
由于Microsoft的命令过于繁琐且难以理解,我先尝试了这个选项。

广告
将在 10 秒后关闭
bannerAds