日期:2014-05-17  浏览次数:20457 次

参数数据类型 varbinary(max) 对于 textptr 函数的参数 1 无效
SQL Server 2008
DECLARE @ptrval varbinary(16);
SELECT @ptrval = TEXTPTR(FileContent) FROM File WHERE ID = 67;
FileContent 的类型是[FileContent] [varbinary](max) FILESTREAM  NULL,
如何在不改变表结构的情况下解决这个问题?

------解决方案--------------------
參照操作方法
http://technet.microsoft.com/zh-cn/library/cc645962.aspx
------解决方案--------------------
try this,

DECLARE @ptrval varbinary(16);
SELECT @ptrval = TEXTPTR(cast(FileContent as ntext)) FROM File WHERE ID = 67;

------解决方案--------------------
TEXTPTR只针对老版本的blob数据进行操作。

对于这些max数据, 如果小于8kb,那么则将存在数据页内, 如果大于8k,则以以前老版本的blob的方式仅存放二进制指针.
也就是说同一个表中的max数据,可能某些行存在数据页中,某些行只是存放了指针,理解了这一点,可以想像实际上TEXTPTR不再对max数据操作通用。所以新的架构(05/08)屏蔽了用户的这个“接口"

楼主的意图是想拿到这个varbinary(max)域的指针吧,通过上面的描述,你应该明白,这样是不能获取到的。

对于4楼先cast再textptr的作法,实际上跟楼主的意图已经不一样了,仅仅只是形似,语法不报错,你所取的已经是一个内存数据的指针了。

微软已声明,不建议在工作中使用一些功能, 比如text,image, textptr等等。
textptr的存在的意义也仅仅是为了暂时的兼容。

------解决方案--------------------
貌似要在前端程序中处理的喔,用fileStream对象.

参考 http://blog.csdn.net/educast/article/details/4375596