我对SQL Server不了解,请各位多指教,另外,如在一个表中加上如下三个触发器:CREATE TRIGGER MyFileAddRow
ON dbo.Table1
FOR INSERT
AS
 exec xp_proc @Func=1, @TableName='测试表', @FD_CHAR='sfdsdfdd'CREATE TRIGGER MyFileUpdateRow
ON dbo.Table1
FOR UPDATE
AS
 exec xp_proc @Func=2,
              @TableName='测试表',
              @Sql='select * from 测试表 id=100',
              @FD_CHAR='sfdsdfdd'CREATE TRIGGER MyFileDeleteRow
ON dbo.Table1
FOR DELETE
AS
 exec xp_proc @Func=3,
              @TableName='测试表',
              @Sql='select * from 测试表 id=100'我发现,每新增记录时,MyFileAddRow和MyFileDeleteRow都被调用了.

解决方案 »

  1.   

    不可能!
    你改为:CREATE TRIGGER MyFileAddRow
    ON dbo.Table1
    FOR INSERT
    AS
     exec xp_proc @Func=1, @TableName='测试表', @FD_CHAR='sfdsdfdd'
    select '插入'CREATE TRIGGER MyFileUpdateRow
    ON dbo.Table1
    FOR UPDATE
    AS
     exec xp_proc @Func=2,
                  @TableName='测试表',
                  @Sql='select * from 测试表 id=100',
                  @FD_CHAR='sfdsdfdd'
    select '修改'CREATE TRIGGER MyFileDeleteRow
    ON dbo.Table1
    FOR DELETE
    AS
     exec xp_proc @Func=3,
                  @TableName='测试表',
                  @Sql='select * from 测试表 id=100'
    select '删除'
                  你在查询分析器里用insert table1看看
      

  2.   

    感谢 pengdali(大力) 
    如你所说 加上 select 'XXXX',增记录时,就只触发MyFileAddRow了.
    请问这有何不同。
    更重要的是,我如何给我的扩展存贮过程传入适当参数:
    @Func=1, @TableName='测试表', @FD_CHAR='sfdsdfdd'
    我的参数定义规则是:
       Func=1,2,3分别表示 Insert, Update, Delete 一个数据行
       TableName是我要写的二进制数据文件名,这主要是为了通用,使用能适应不同SQLServer表
       Sql是我用来在二进制数据文件中定位要Update或Delete数据行的SQL语句
       其它则是任意数量的字段名变量,及所对应的值,表示Insert或Update后的字段内容
    现在,我应设定这些值,这时触发如何写?
    另,同时操作多条记录时,如何变为多次调用 exec xp_proc