各位老师,我想给(sqlserver2000)中mydatabase数据库中mytext表的所有字段(字段为text类型)加个触法器,如果在更新时检测到内容中有<script>等字符就不更新,请问该怎么写啊,最好贴出全部代码,谢谢了,数据库名称:mydatabase
表名:mytext
mytext表中的字段如下:        id int
        title varchar
        content text
        desc text
        linkinfo text    说明:varchar的也搞定,text怎么都搞不定啊,请各位老师不吝赐教啊....
        

解决方案 »

  1.   

    把字段改为nvarchar/ntext.插入,更新,查询前加N.例如:
    insert into tb(col) values(N'特殊字符')
      

  2.   

    使用 Unicode 数据
    Unicode 标准为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案。所有的计算机都用单一的 Unicode 标准 Unicode 数据中的位模式一致地翻译成字符。这保证了同一个位模式在所有的计算机上总是转换成同一个字符。数据可以随意地从一个数据库或计算机传送到另一个数据库或计算机,而不用担心接收系统是否会错误地翻译位模式。对于用一个字节编码每个字符的数据类型,存在的问题之一就是此数据类型只能表示 256 个不同的字符。这就迫使对于不同的字母表(例如相对较小的欧洲字母表)采用多重编码规格(或者代码页)。而且也不可能处理象日文汉字或韩国文字这样具有数千个字符的字母表。每个 Microsoft® SQL Server™ 排序规则都有一个对表示 char、varchar 和 text 值中的每个字符定义位模式进行定义的代码页。可为个别的列和字符常量指派不同的代码页。客户端计算机使用与操作系统区域设置相关联的代码页解释字符位模式。有很多种不同的代码页。一些字符出现在某些代码页上,但并不出现在其它的代码页上。某些字符在一些代码页上用一个位模式定义,而在其它的代码页上却用另一个位模式定义。当您设计必须处理不同语言的国际性系统时,为了满足不同国家/地区的语言需求,给所有的计算机挑选代码页就变得困难了。要保证每一台计算机与使用不同代码页的系统交互时都进行正确的翻译也是困难的。Unicode 规格通过采用两个字节编码每个字符使这个问题迎刃而解。转换最通用商业语言的单一规格具有足够多的 2 字节的模式 (65,536)。因为所有的 Unicode 系统均一致地采用同样的位模式来代表所有的字符,所以当从一个系统转到另一个系统时,将不会存在未正确转换字符的问题。通过在整个系统中使用 Unicode 数据类型,可尽量减少字符转换问题。在 Microsoft SQL Server 中,以下数据类型支持 Unicode 数据: nchar
    nvarchar
    ntext 
    说明  这些数据类型的前缀 n 来自 SQL-92 标准中的 National(Unicode)数据类型。nchar、nvarchar 和 ntext 的用法分别与 char、varchar 和 text 的用法一样,但在以下方面不同: Unicode支持的字符范围更大。
    存储 Unicode 字符所需要的空间更大。
    nchar 和 nvarchar 列最多可以有 4,000 个字符,而不象 char 和 varchar 字符那样可以有 8,000 个字符。
    Unicode 常量使用 N 开头来指定:N'A Unicode string'。
    所有 Unicode 数据都使用相同的 Unicode 代码页。排序规则不控制用于 Unicode 列的代码页,仅控制比较规则和是否区分大小写等特性。 
      

  3.   

    我是有特殊字符就不更新,你这是//而且一定是TEXT类型的,内容比较多,请说详细点,可以吗,谢谢了
      

  4.   

    CREATE TRIGGER [tr_sysuser] ON [dbo].[sysuser] FOR UPDATE AS
    declare  @rowcount int
    set @rowcount=0
    begin TRANSACTIONif update(su_name) and exists(SELECT 1 FROM inserted where su_name like '%script%') set @rowcount=1
    if update(su_loginname) and exists(SELECT 1 FROM inserted where su_loginname like '%script%') set @rowcount=1IF (@rowcount=1)
    ROLLBACK TRANSACTION
    else
    commit TRANSACTI像这种,但只能是varchar的,TEXT的我怎么都搞不定,能不能帮我解决下,我现在只有这点分了,如果有分我一定多给的,谢谢了
      

  5.   

    create table mytext(id int, title varchar(60), [content] text, [desc] text, linkinfo text)
    insert into mytext select 1,'台银楼老板夺枪勇搏双盗 劫匪一中弹一吓死','aweofinsaidfawefwef','aerawefzsfzsf','一名目击者表示,当时听到隔壁银楼传出巨大声响,还以为是吵架,怕闹出人命而报警,没多久传来一声“抢劫!”他与同事好奇前往察看,赫然发现店内有人打斗、又传出枪响,于是与同事拿棍棒再回银楼帮忙,期间又听到另一枪响,进店内,看到陈朝顺手拿着枪制伏2名抢匪,并喝令对方:“你给我跪下!不准动!”目击者说,中弹的陈品蓉倒在店内右侧,黄嫌左大腿中弹躺在店内中央,贺嫌则趴在店内最左侧,没多久5名警员获报赶抵,急忙将送陈品蓉送医,随后将中弹的黄嫌拖到店外,欲处理贺嫌时发现他趴在地上奄奄一息,虽紧急施以心肺复苏术急救,仍未见好转,紧急将2人送医救治。黄嫌一度供称,贺嫌前几天从屏东北上找他,说要干一票大的,但没多久又改口,指贺嫌请他陪同前
      针对贺嫌抢劫过程中休克不治,警方说,据贺嫌家属表示,死者生前有心血管疾病,不排除可能因头戴全安帽、又与人扭打,疑似因紧张导致猝死。医师郑耀铭则说,贺嫌若原本就有心血管疾病,抢劫过程中因心跳加速,'
    go
    create trigger checkscript
    on mytext
    INSTEAD OF insert
    as
    begin
    insert into mytext select * from inserted where charindex('<script>',linkinfo)=0
    end
    go
    insert into mytext select 1,'挺扁人士制“阿扁出狱倒计时器”','rasdfdszfsdf','aerawefzsfzsf','据报道,12月2日,陈水扁从台北看守所出发,他身穿白色T恤、卡其色背心、棉质七分裤和蓝白拖鞋,临行前还转身向相处2年多的法警一一握手道别致谢,坐上囚车前往桃园龟山的台北监狱服刑,从此被称为代号1020,展开为期至少8年的牢狱生活。
      而就在同一天,<script>死忠的“全球华人挺扁联盟”马上仿效所谓的“退伍定时器”,在网络上设置了“阿扁出狱定时器”,还将其网域名称登记为“1020.tw”,而且不但有网页版,还可以把定时器放在iGoogle首页、脸书(Facebook)上,让支持者可以一边上网一边挺阿扁。'
    select * from mytext
    go
    drop table mytext
    /*
    id          title                                                        content                                                                                                                                                                                                                                                          desc                                                                                                                                                                                                                                                             linkinfo
    ----------- ------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    1           台银楼老板夺枪勇搏双盗 劫匪一中弹一吓死                                         aweofinsaidfawefwef                                                                                                                                                                                                                                              aerawefzsfzsf                                                                                                                                                                                                                                                    一名目击者表示,当时听到隔壁银楼传出巨大声响,还以为是吵架,怕闹出人命而报警,没多久传来一声“抢劫!”他与同事好奇前往察看,赫然发现店内有人打斗、又传出枪响,于是与同事拿棍棒再回银楼帮忙,期间又听到另一枪响,进店内,看到陈朝顺手拿着枪制伏2名抢匪,并喝令对方:“你给我跪下!不准动!”目击者说,中弹的陈品蓉倒在店内右侧,黄嫌左大腿中弹躺在店内中央,贺嫌则趴在店内最左侧,没多久5名警员获报赶抵,急忙将送陈品蓉送医,随后将中弹的黄嫌拖到店外,欲处理贺嫌时发现他趴在地上奄奄一息,虽紧急施以心肺复苏术急救,仍未见好转(1 行受影响)*/
      

  6.   

    1.这种判断是否要插入的触发器,应该使用 INSTEAD OF 触发器,经判断后确定是否要插入或更新,而不要使用for 或 after 触发器.
    2.是否插入可以根据 inserted表来进行判断.
      

  7.   

    create table mytext(id int, title varchar(60), [content] text, [desc] text, linkinfo text)
    insert into mytext select 1,'台银楼老板夺枪勇搏双盗 劫匪一中弹一吓死','aweofinsaidfawefwef','aerawefzsfzsf','一名目击者表示,当时听到隔壁银楼传出巨大声响,还以为是吵架,怕闹出人命而报警,没多久传来一声“抢劫!”他与同事好奇前往察看,赫然发现店内有人打斗、又传出枪响,于是与同事拿棍棒再回银楼帮忙,期间又听到另一枪响,进店内,看到陈朝顺手拿着枪制伏2名抢匪,并喝令对方:“你给我跪下!不准动!”目击者说,中弹的陈品蓉倒在店内右侧,黄嫌左大腿中弹躺在店内中央,贺嫌则趴在店内最左侧,没多久5名警员获报赶抵,急忙将送陈品蓉送医,随后将中弹的黄嫌拖到店外,欲处理贺嫌时发现他趴在地上奄奄一息,虽紧急施以心肺复苏术急救,仍未见好转,紧急将2人送医救治。黄嫌一度供称,贺嫌前几天从屏东北上找他,说要干一票大的,但没多久又改口,指贺嫌请他陪同前
      针对贺嫌抢劫过程中休克不治,警方说,据贺嫌家属表示,死者生前有心血管疾病,不排除可能因头戴全安帽、又与人扭打,疑似因紧张导致猝死。医师郑耀铭则说,贺嫌若原本就有心血管疾病,抢劫过程中因心跳加速,'
    go
    create trigger checkscript
    on mytext
    INSTEAD OF update
    as
    begin
    update mytext set linkinfo=a.linkinfo from mytext b inner join inserted a on a.id=b.id where charindex('<script>',a.linkinfo)=0
    end
    go
    update mytext set linkinfo='<script>据报道,12月2日,陈水扁从台北看守所出发,他身穿白色T恤、卡其色背心、棉质七分裤和蓝白拖鞋,临行前还转身向相处2年多的法警一一握手道别致谢,坐上囚车前往桃园龟山的台北监狱服刑,从此被称为代号1020,展开为期至少8年的牢狱生活。
      而就在同一天,死忠的“全球华人挺扁联盟”马上仿效所谓的“退伍定时器”,在网络上设置了“阿扁出狱定时器”,还将其网域名称登记为“1020.tw”,而且不但有网页版,还可以把定时器放在iGoogle首页、脸书(Facebook)上,让支持者可以一边上网一边挺阿扁。'
     where id=1
    select linkinfo from mytext
    go
    drop table mytext
    /*
    --未被更新:
    linkinfo
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    一名目击者表示,当时听到隔壁银楼传出巨大声响,还以为是吵架,怕闹出人命而报警,没多久传来一声“抢劫!”他与同事好奇前往察看,赫然发现店内有人打斗、又传出枪响,于是与同事拿棍棒再回银楼帮忙,期间又听到另一枪响,进店内,看到陈朝顺手拿着枪制伏2名抢匪,并喝令对方:“你给我跪下!不准动!”目击者说,中弹的陈品蓉倒在店内右侧,黄嫌左大腿中弹躺在店内中央,贺嫌则趴在店内最左侧,没多久5名警员获报赶抵,急忙将送陈品蓉送医,随后将中弹的黄嫌拖到店外,欲处理贺嫌时发现他趴在地上奄奄一息,虽紧急施以心肺复苏术急救,仍未见好转(1 行受影响)*/
      

  8.   

    太感谢qianjin036a老师了
    你这是插入,哪更新呢,该怎么写呢,我有点笨,能不能明示一下啊,谢谢啊
      

  9.   

    更新已经写了,你可以把我下面更新语句里的<script>去掉试试.
    同时可以对其他text或varchar列作同样的处理.
    类似于:
    create trigger checkscript
    on mytext
    INSTEAD OF update
    as
    begin
    update mytext set title=a.title,[content]=a.[content],linkinfo=a.linkinfo from mytext b inner join inserted a on a.id=b.id where charindex('<script>',a.title)=0 and charindex('<script>',a.content)=0 and charindex('<script>',a.linkinfo)=0
    end
      

  10.   

    qianjin036a老师,我太感谢您了,谢谢谢谢,关键是我只有这点分了,想多给都给不了,你是大好人啊,再次感谢,马上结帐