触发器问题

agefworld 2003-08-26 10:35:53
CREATE trigger Modi_Date_tbAffiches on tbAffiches
for update
as
declare @id varchar(50) ,@title varchar(300),@content varchar(8000),@FdDept varchar(300)
select @id =FdAfficheID,@title=FdTitle,@content=FdContent,@FdDept=FdDept from tbAffiches

update all_content set need_title=@title , need_content=cast(@title as varchar(300))+cast(@FdDept as varchar(300))+cast(@content as varchar(8000)) where need_tbl='tbAffiches' and need_msg=@id


但是由于我的 表中 content 字段 是 text 类型的。 提示将截断字符串 ,但是),@content varchar(8000) 已经是最大了阿。怎么办啊。。。
...全文
79 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-08-27
  • 打赏
  • 举报
回复
--按照你的意思,应该这样处理

CREATE trigger Modi_Date_tbAffiches on tbAffiches
for update
as
declare @id varchar(50)
,@title varchar(300)
,@content varchar(8000)
,@FdDept varchar(300)
select @id =FdAfficheID
,@title=FdTitle
,@content=FdContent
,@FdDept=FdDept
from tbAffiches
update all_content
set need_title=@title
,need_content=b.FdContent
,need_content=cast(@title as varchar(300))
+cast(@FdDept as varchar(300))
+cast(@content as varchar(8000))
from all_content a,tbAffiches b
where a.need_tbl='tbAffiches' and a.need_msg=@id
and a.need_msg=b.FdAfficheID

--为need_content加上未包含的部分
declare @p varbinary(16)
select @p=textptr(need_content)
from all_content
where need_tbl='tbAffiches' and need_msg=@id
set @content=cast(@title as varchar(300))+cast(@FdDept as varchar(300))
updatetext all_content.need_content @p 0 0 @content
agefworld 2003-08-26
  • 打赏
  • 举报
回复
楼上有没有现成的例子让我看看。。
txlicenhe 2003-08-26
  • 打赏
  • 举报
回复
READTEXT
UPDATETEXT
WRITETEXT
tiny_yan 2003-08-26
  • 打赏
  • 举报
回复
老哥,可不能偷懒,text字段的值不是随便定义个变量就取出来了。
tiny_yan 2003-08-26
  • 打赏
  • 举报
回复
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


请参见

@@TEXTSIZE

UPDATETEXT

WRITETEXT
CrazyFor 2003-08-26
  • 打赏
  • 举报
回复
TRY:

CREATE trigger Modi_Date_tbAffiches on tbAffiches
for update
as

update all_content set need_title=FdAfficheID.fdtitle , need_content=substring(FdAfficheID.FDtitle1,300)+substring(FdAfficheID.FDDept,1,300)+FdAfficheID.ftcontent
from tbaffiches where need_tbl='tbAffiches' and need_msg=tbaffiches.FdAfficheID
agefworld 2003-08-26
  • 打赏
  • 举报
回复
怎么定义啊。。
好像不允许啊。。。
hjb111 2003-08-26
  • 打赏
  • 举报
回复
为何不把@content 定义为text类型呢?

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧