我用的是SqlServer,想利用缓存触发器依赖性实现前端的数据呈现  依靠这个触发器建立的lechange.txt来实时删除缓存值。
触发器如下:
CREATE TRIGGER UpdateCache
ON aaa
FOR UPDATE, DELETE, INSERT
AS
DECLARE @cmd Varchar( 200 )
SELECT @cmd = 'echo ' + Cast( getDATE() As Varchar( 50 ) ) +
  ' > c:\ leChange.txt'
EXEC master..xp_cmdshell @cmd, no_output
我试了,在c盘下能生成leChange.txt,当我第一次修改数据库表时,leChange.txt会在里面加一行
值,但再修改,删除,增加就不会在里面写值了,这样,也就没达到缓存触发器依赖性,请问如何做?

解决方案 »

  1.   

    其实这只是变相的用.NET中的缓存文件的依赖性,可用该触发器只能在第一次用时起作用,是触发器编写的不对吗?请各位指教!!!
      

  2.   

    倒是挺有意思,待试试再说。不过SQL Server的脚本里边可以直接调用COM组件的,通过OA打头的几个存储过程。你可以把.net组件包装、注册为COM组件。原来据说SQL Server2005中直接支持.net语言与T_SQL混合编写过程,这样估计我的服务器程序中百分之九十以上的代码可以放在数据库中了。不知道SQL2005是否实现。
      

  3.   

    没有产生文件。触发器肯定运行了,我增加了一句print,他输出了中间步骤。
      

  4.   

    啊!找出来了。你贴的代码在c:\后边有一制表符。
    drop trigger updatecache
    go
    CREATE TRIGGER UpdateCache
    ON aaa
    FOR UPDATE, DELETE, INSERT
    AS
    DECLARE @cmd Varchar( 200 )
    SELECT @cmd = 'echo ' + Cast( getDATE() As Varchar( 50 ) ) +
      ' > c:\leChange.txt'
    EXEC master..xp_cmdshell @cmd, no_output
    declare @say nvarchar(2000)
    set @say='please check the command  ---->'+@cmd
    print @say
    go
      

  5.   

    不行呀,我原先就说过:
    在c盘下能生成leChange.txt,当我第一次修改数据库表时,leChange.txt会在里面加一行
    值,但再修改,删除,增加就不会在里面写值了,这样,也就没达到缓存触发器依赖性
      

  6.   

    我这里没有问题。改变记录,触发器执行,并且文件会被覆盖,里面写的是新值!你输入我下面这段代码:if object_id('#a') is not null drop table #a
    go
    create table #a(line nvarchar(1000))
    go
    if object_id('aaa') is not null drop table aaa
    go
    create table aaa(row int identity primary key,
        version varchar(20) default cast(getdate() as varchar(20)))
    go
    if object_id('updateCache') is not null drop trigger updateCache
    go
    CREATE TRIGGER UpdateCache
    ON aaa
    FOR UPDATE, DELETE, INSERT
    AS
    DECLARE @cmd Varchar( 200 )
    SELECT @cmd = 'echo ' + Cast(newid() as varchar(40) ) +
      ' > c:\leChange.txt'
    EXEC master..xp_cmdshell @cmd, no_output
    print 'please check the command  ---->'+@cmd
    SELECT @cmd = 'type c:\leChange.txt'
    delete #a
    insert into #a EXEC master..xp_cmdshell @cmd
    select left(line,70) as [文件内容] from #a
    go
    print 'test 1'
    insert aaa default values
    select * from aaa
    print 'test 2'
    update aaa set version=dateadd(month,1,version)
    select * from aaa
    print 'test 3'
    delete aaa
    select * from aaa
    go
    我看你大概是对自己的触发器运行误会了。如果触发时间很短,写入文件是时间完全一致,可能会误认为没有写入。