SQL Server Varbinary(max):从varbinary字段中选择字节子集

17
什么是从 varbinary(MAX) 字段中只读取二进制数据的最有效方法(不使用 FileStreams)在 SQL Server 2008 中?
在向列写入数据时,T-SQL 中提供了 VarBinary.Write() 函数,允许增量地将字节写入字段,但似乎没有可用于读取数据的类似函数。
我知道 .Net 中的 DataReader.GetBytes() 方法可以仅选择您要求的字节,但这是否会带来性能开销?例如 sqlserver 中的 select 是否会读取数据库中的所有字节,然后将这些字节全部传递给 getBytes() 方法,以便它从中获取所请求的子集字节?
感谢任何帮助。
2个回答

25

您可以使用SUBSTRING函数。该函数从服务器的二进制数据中读取一个片段,并仅将该片段返回给客户端。

[SUBSTRING]在SQL Server中返回字符、二进制、文本或图像表达式的一部分。[它]如果表达式是受支持的二进制数据类型之一,则返回二进制数据。返回的字符串与指定的表达式具有相同的类型,但有以下异常情况。


7
+1 很有趣!我不知道我可以在 VARBINARY 列上使用 SUBSTRING! :-) - marc_s
2
太棒了。谁能想到呢?低贱的子字符串的威力。 - James Wiseman

1

使用DataReader.GetBytes()是可以避免额外开销的,据我所知。但你需要使用带有CommandBehavior.SequentialAccess选项的ExecuteReader()方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接