linux sql var,linux – 为什么sqlcmd会截断varbinary(max)?

在sys.assembly_files目录中,我可以看到一个名为content的字段

1> SELECT assembly_id, LEFT(name, 50), file_id, content FROM sys.assembly_files;

2> GO

assembly_id file_id content

----------- -------------------------------------------------- ----------- -------

1 microsoft.sqlserver.types.dll 1 0x4D5A90x07585

(1 rows affected)

但是,即使使用sqlcmd -Y 8000 -y 5000我也不能超过0x4D5A90x075850x167D00x043CB

assembly_id file_id content

----------- -------------------------------------------------- ----------- -------

1 microsoft.sqlserver.types.dll 1 0x4D5A90x075850x167D00x043CB

想知道发生了什么,并怀疑客户端没有将一切都归还给我,我尝试了mssql-cli,pg-cli到SQL Server的端口.使用mssql-cli,我看到了整个内容字段,实际上看起来是正确的大小是位内容.这让我相信这是sqlcmd.exe截断,或其他毁坏和掺杂程序集的字节码表示的问题.使用mssql-cli,我得到了这个

master>SELECT assembly_id, LEFT(name, 50), file_id, content FROM sys.assembly_files;

......

-[ RECORD 1 ]-------------------------

assembly_id | 1

(No column name) | microsoft.sqlserver.types.dll

file_id | 1

content | 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000D00000000E1FBA0E00B409CD21B........ and on and on

(1 row affected)

解决方法:

Why does sqlcmd truncate varbinary(max)?

因为它可能是GB的数据,所以像SQLCMD和SSMS这样的查询工具会截断显示的结果.

您可以使用bcp.exe转储到文件,将“prefix-length”设置为0.

bcp "select content from sys.assembly_files where name = 'microsoft.sqlserver.types.dll'" queryout microsoft.sqlserver.types.dll -T

Enter the file storage type of field content [varbinary(max)]:

Enter prefix-length of field content [8]: 0

Enter length of field content [0]:

Enter field terminator [none]:

Do you want to save this format information in a file? [Y/n] n

Starting copy...

1 rows copied.

Network packet size (bytes): 4096

Clock Time (ms.) Total : 62 Average : (16.13 rows per sec.)

标签:sql-server-2017,linux,sqlcmd,system-tables

来源: https://codeday.me/bug/20190807/1606924.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值