【发布时间】:2012-11-26 12:03:12
【问题描述】:
我的问题是:我有可能将巨大的文件存储在 SQL Server 2008 (> 1GB) 上的二进制(图像)字段中。
如果我使用常规 select 语句返回整个二进制文件,则查询需要一分钟以上才能将结果返回到我的 .NET 程序,并且我的客户端应用程序会超时。我正在寻找的是 TSQL 代码,它将限制返回的数据大小(可能是 300mb),允许我遍历剩余的块并防止超时。
这必须发生在 SQL 查询中,而不是在数据返回后的处理中。
我试过 SubString,MS 说它适用于二进制数据,但我得到的只是最大 8000 字节。我尝试的最后一件事是这样的:
select substring(Package,0,300000000) 'package', ID from rplPackage where ID=0
--where package is the huge binary stored in a image field
数据流也不是一个真正的选择,因为客户端应用程序。
有什么想法吗?
【问题讨论】:
-
您应该重新计算,将文件存储为数据库 BLOBS 是否真的满足您的需求:将文件作为文件存储并仅将其路径和元数据存储在数据库中可能会更好。经验法则是:如果数据库不能“理解”文件的内容,请考虑将其移出。
-
@EugenRieck 来吧,根据理解的论点,甚至不应该有二进制数据类型。
-
有一些用例(想想穷人的共享 FS),但 OQ 很清楚地表明,这里 BLOB 并不是一个完美的解决方案
标签: sql sql-server sql-server-2008 tsql blob