用Text类型:READTEXT
UPDATETEXT
WRITETEXT
--------------------
Transact-SQL 参考
READTEXT
读取 text、ntext 或 image 列中的 text、ntext 或 image 值,从指定的偏移量开始读取指定的字节数。语法
READTEXT { table.column text_ptr offset size } [ HOLDLOCK ] 参数
table.column是从中读取的表和列的名称。表名和列名必须符合标识符的规则。必须指定表名和列名,不过可以选择是否指定数据库名称和所有者名称。text_ptr有效文本指针。text_ptr 必须是 binary(16)。offset开始读取 text、image 或 ntext 数据之前跳过的字节数(使用 text 或 image 数据类型时)或字符数(使用 ntext 数据类型时)。使用 ntext 数据类型时,offset 是在开始读取数据前跳过的字符数。使用 text 或 image 数据类型时,offset 是在开始读取数据前跳过的字节数。 size是要读取数据的字节数(使用 text 或 image 数据类型时)或字符数(使用 ntext 数据类型时)。如果 size 是 0,则表示读取了 4 KB 字节的数据。HOLDLOCK使文本值一直锁定到事务结束。其他用户可以读取该值,但是不能对其进行修改。注释
使用 TEXTPTR 函数获得有效的 text_ptr 值。如果返回不止一行,TEXTPTR 将返回指向指定行中的 text、ntext 或 image 列的指针,或返回指向查询所返回的最后一行中的 text、ntext 或 image 列的指针。由于 TEXTPTR 返回 16 字节的二进制字符串,所以最好声明一个控制文本指针的局部变量,然后在 READTEXT 中使用该变量。有关声明局部变量的更多信息,请参见 DECLARE @local_variable。 在 SQL Server 2000 中可能存在无效的文本指针。有关 text in row 选项的更多信息,请参见 sp_tableoption。有关如何使文本指针无效的更多信息,请参见 sp_invalidate_textptr。如果 @@TEXTSIZE 函数的值小于为 READTEXT 指定的大小,它将替代为 READTEXT 指定的大小。@@TEXTSIZE 函数是对由 SET TEXTSIZE 语句设置的返回数据字节数的限制。有关如何设置 TEXTSIZE 会话设置的更多信息,请参见 SET TEXTSIZE。权限
READTEXT 权限默认授予对指定的表具有 SELECT 权限的用户。这些权限可在传递 SELECT 权限时传递。示例
下例读取 pub_info 表中 pr_info 列的第 2 个至第 26 个字符。USE pubs
GO
DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr INNER JOIN publishers p
ON pr.pub_id = p.pub_id
AND p.pub_name = 'New Moon Books'
READTEXT pub_info.pr_info @ptrval 1 25
GO
请参见@@TEXTSIZEUPDATETEXTWRITETEXT©1988-2000 Microsoft Corporation。保留所有权利。
UPDATETEXT
WRITETEXT
--------------------
Transact-SQL 参考
READTEXT
读取 text、ntext 或 image 列中的 text、ntext 或 image 值,从指定的偏移量开始读取指定的字节数。语法
READTEXT { table.column text_ptr offset size } [ HOLDLOCK ] 参数
table.column是从中读取的表和列的名称。表名和列名必须符合标识符的规则。必须指定表名和列名,不过可以选择是否指定数据库名称和所有者名称。text_ptr有效文本指针。text_ptr 必须是 binary(16)。offset开始读取 text、image 或 ntext 数据之前跳过的字节数(使用 text 或 image 数据类型时)或字符数(使用 ntext 数据类型时)。使用 ntext 数据类型时,offset 是在开始读取数据前跳过的字符数。使用 text 或 image 数据类型时,offset 是在开始读取数据前跳过的字节数。 size是要读取数据的字节数(使用 text 或 image 数据类型时)或字符数(使用 ntext 数据类型时)。如果 size 是 0,则表示读取了 4 KB 字节的数据。HOLDLOCK使文本值一直锁定到事务结束。其他用户可以读取该值,但是不能对其进行修改。注释
使用 TEXTPTR 函数获得有效的 text_ptr 值。如果返回不止一行,TEXTPTR 将返回指向指定行中的 text、ntext 或 image 列的指针,或返回指向查询所返回的最后一行中的 text、ntext 或 image 列的指针。由于 TEXTPTR 返回 16 字节的二进制字符串,所以最好声明一个控制文本指针的局部变量,然后在 READTEXT 中使用该变量。有关声明局部变量的更多信息,请参见 DECLARE @local_variable。 在 SQL Server 2000 中可能存在无效的文本指针。有关 text in row 选项的更多信息,请参见 sp_tableoption。有关如何使文本指针无效的更多信息,请参见 sp_invalidate_textptr。如果 @@TEXTSIZE 函数的值小于为 READTEXT 指定的大小,它将替代为 READTEXT 指定的大小。@@TEXTSIZE 函数是对由 SET TEXTSIZE 语句设置的返回数据字节数的限制。有关如何设置 TEXTSIZE 会话设置的更多信息,请参见 SET TEXTSIZE。权限
READTEXT 权限默认授予对指定的表具有 SELECT 权限的用户。这些权限可在传递 SELECT 权限时传递。示例
下例读取 pub_info 表中 pr_info 列的第 2 个至第 26 个字符。USE pubs
GO
DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr INNER JOIN publishers p
ON pr.pub_id = p.pub_id
AND p.pub_name = 'New Moon Books'
READTEXT pub_info.pr_info @ptrval 1 25
GO
请参见@@TEXTSIZEUPDATETEXTWRITETEXT©1988-2000 Microsoft Corporation。保留所有权利。
解决方案 »
- 有关安装MSSQL2005的问题
- 求助SQL:存储过程中事务太慢
- 如何设置网站上SQl Server数据库安全?
- 怎么用VB程序来控制id是否自动增长????
- sqlserver2012 AlwaysOn 一台有存储,一台没有存储能作群集吗
- 为何用php提取mssql的日期值不能正常显示?
- SQL Server触发器问题,在线等。
- 如何知道其他用户正在操作一条记录(Delphi6 ADO+MS SQL Server)
- 如何消除sql server中datetime默认值1900-01-01?
- 有没有这样的方法
- 谁能给我一个权限管理的例子?
- 有一个大于8000个字符的字符串,如何在sql server中存储,
--定义表
declare @tb table(aa text)--取得足够长的字符串
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+name from syscolumns--显示取得的字符串长度
select 字符长度=len(@sql)--插入表
insert into @tb values(@sql)--从表中取出字符串
select @sql=aa from @tb--显示取出的字符串长度
select len(@sql)
insert into #temp(tmid,tmDetail) values('0000','')DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(tmDetail) FROM #tminfo where tmid=@@tmIDUPDATETEXT #tminfo.tmDetail @ptrval NULL 0 '<html><head>'
UPDATETEXT #tminfo.tmDetail @ptrval NULL 0 '<meta http-equiv=''Content-Type'' content=''text/html;charset=gb2312''></head>'
UPDATETEXT #tminfo.tmDetail @ptrval NULL 0 '<BODY link=midnightblue vlink=Orange >'
UPDATETEXT #tminfo.tmDetail @ptrval NULL 0 '<P><TABLE WIDTH=610px HEIGHT=1px cellSpacing=1 cellPadding=1 border=0>'
UPDATETEXT #tminfo.tmDetail @ptrval NULL 0 '<TR><TD><P align=center><FONT color=mediumorchid size=5><STRONG>TestTestTest</Strong>'
....以上是我的代码,只能写到<strong>以后的就写不进了。
SELECT @ptrval = TEXTPTR(tmDetail) FROM #tminfo where tmid='0000'
READTEXT #tminfo.tmDetail @ptrval 0 4500
insert into #temp(tmid,tmDetail) values('0000','')DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(tmDetail) FROM #temp where tmid='0000'UPDATETEXT #temp.tmDetail @ptrval NULL 0 '<html><head>'
UPDATETEXT #temp.tmDetail @ptrval NULL 0 '<meta http-equiv=''Content-Type'' content=''text/html;charset=gb2312''></head>'
UPDATETEXT #temp.tmDetail @ptrval NULL 0 '<BODY link=midnightblue vlink=Orange >'
UPDATETEXT #temp.tmDetail @ptrval NULL 0 '<P><TABLE WIDTH=610px HEIGHT=1px cellSpacing=1 cellPadding=1 border=0>'
UPDATETEXT #temp.tmDetail @ptrval NULL 0 '<TR><TD><P align=center><FONT color=mediumorchid size=5><STRONG>TestTestTest</Strong>'
UPDATETEXT #temp.tmDetail @ptrval NULL 0 '<TR><TD><P align=center><FONT color=mediumorchid size=5><STRONG>TestTestTest</Strong>'
UPDATETEXT #temp.tmDetail @ptrval NULL 0 '<TR><TD><P align=center><FONT color=mediumorchid size=5><STRONG>TestTestTest</Strong>'
UPDATETEXT #temp.tmDetail @ptrval NULL 0 '<TR><TD><P align=center><FONT color=mediumorchid size=5><STRONG>TestTestTest</Strong>'
UPDATETEXT #temp.tmDetail @ptrval NULL 0 '<TR><TD><P align=center><FONT color=mediumorchid size=5><STRONG>TestTestTest</Strong>'
UPDATETEXT #temp.tmDetail @ptrval NULL 0 '结束标志'SELECT @ptrval = TEXTPTR(tmDetail) FROM #temp where tmid='0000'
READTEXT #temp.tmDetail @ptrval 0 627
drop table #temp
实际写入/读取的字符串长度为627
你看你的SQL是否没有打补丁?
你怎么知道是627呢?我想读出text中所有的字符,如何写呀?