做爰高潮a片〈毛片〉,尤物av天堂一区二区在线观看,一本久久A久久精品VR综合,添女人荫蒂全部过程av

最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

觸發(fā)器實(shí)現(xiàn)記錄操作表的日志

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 08:16:07
文檔

觸發(fā)器實(shí)現(xiàn)記錄操作表的日志

觸發(fā)器實(shí)現(xiàn)記錄操作表的日志:這個(gè)功能我是琢磨了好久,本來(lái)我的sqlserver方面的知識(shí)深入了解的就不多,關(guān)鍵的難點(diǎn)是用變量代替字段名,然后獲取字段在表中存的值,再賦給另外一個(gè)變量,我之所以這么做,因?yàn)楹竺婧脦滋幰玫竭@個(gè)字段的名稱,我才用變量代替,便于修改,可就是 實(shí)現(xiàn) 花費(fèi)
推薦度:
導(dǎo)讀觸發(fā)器實(shí)現(xiàn)記錄操作表的日志:這個(gè)功能我是琢磨了好久,本來(lái)我的sqlserver方面的知識(shí)深入了解的就不多,關(guān)鍵的難點(diǎn)是用變量代替字段名,然后獲取字段在表中存的值,再賦給另外一個(gè)變量,我之所以這么做,因?yàn)楹竺婧脦滋幰玫竭@個(gè)字段的名稱,我才用變量代替,便于修改,可就是 實(shí)現(xiàn) 花費(fèi)

這個(gè)功能我是琢磨了好久,本來(lái)我的sqlserver方面的知識(shí)深入了解的就不多,關(guān)鍵的難點(diǎn)是用變量代替字段名,然后獲取字段在表中存的值,再賦給另外一個(gè)變量,我之所以這么做,因?yàn)楹竺婧脦滋幰玫竭@個(gè)字段的名稱,我才用變量代替,便于修改,可就是 實(shí)現(xiàn) 花費(fèi)

這個(gè)功能我是琢磨了好久,本來(lái)我的sqlserver方面的知識(shí)深入了解的就不多,關(guān)鍵的難點(diǎn)是用變量代替字段名,然后獲取字段在表中存的值,再賦給另外一個(gè)變量,我之所以這么做,因?yàn)楹竺婧脦滋幰玫竭@個(gè)字段的名稱,我才用變量代替,便于修改,可就是實(shí)現(xiàn)花費(fèi)了很長(zhǎng)時(shí)間,網(wǎng)上這么方面的資料又少,可終究還是找到了解決方案,希望大家以后遇到同樣的問(wèn)題不至于頭大,把具體的實(shí)現(xiàn)分享給大家

CREATE trigger [dbo].[trg_new_course]

on [dbo].[course]

for insert,delete,update

as

begin

declare @tabname varchar(50),

    @pkname varchar(20),

    @pkvalue varchar(20),

@opttype int,

@optip varchar(20),

@optsql varchar(200),

    @xmlstr nvarchar(500);

declare @optinfo nvarchar(500), @id_i int, @id_d int;

declare @min_id int, --最小的字段號(hào)

    @total int, --記錄總數(shù)

    @row_count int, --循環(huán)變量

    @temp_name varchar(100), --臨時(shí)字段名

    @temp_pre_name varchar(100), --帶字段類型前綴的變量

    @temp_type varchar(100), --臨時(shí)字段類型

    @temp_value varchar(100), --臨時(shí)字段值

    @xmlnode_value varchar(100), --xml的節(jié)點(diǎn)值

    @sql_name varchar(100), --sql操作相關(guān)的字段

    @sql_value varchar(100), --sql操作相關(guān)的字段值

    @sql nvarchar(200), --存儲(chǔ)動(dòng)態(tài)

    sql @pk_pre_name varchar(20) --帶類型前綴的關(guān)鍵字段名

    set @sql_name = '';

set @sql_value = '';

set @row_count = 1;

set @pkname = 'id'; --關(guān)鍵字名稱

set @tabname = 'course'; --操作的表名

set @optinfo = '';

select @id_i=id from inserted; select @id_d=id from deleted;

select @temp_type = data_type from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @tabname and column_name = @pkname;

if (@temp_type = 'int')

begin

  set @pk_pre_name = 'i' + @pkname

end

else if(@temp_type = 'float')

begin

  set @pk_pre_name = 'f' + @pkname

end

else if(@temp_type = 'decimal')

begin

  set @pk_pre_name = 'd' + @pkname

end

else if(@temp_type = 'datetime')

begin

  set @pk_pre_name = 'da' + @pkname

end

else

begin

  set @pk_pre_name = 'c' + @pkname

end

if @id_i is null and @id_d is not null --刪除操作

begin

  set @pkvalue = @id_d;

  set @opttype = 1;

  --若變量的類型不是字符串型

  set @pkvalue = convert(varchar(200),@pkvalue);

  --生成執(zhí)行刪除操作的sql語(yǔ)句

  set @optsql = 'delete from ' + @tabname + ' where ' + @pkname + '=' + @pkvalue;

  --生成刪除操作字段信息的xml表示

   set @optinfo = @optinfo + '<' + @pkname +'>';

  set @optinfo = @optinfo + @pkvalue;

  set @optinfo = @optinfo + '';

end

else

begin

  set @pkvalue = @id_i;

   select * into temps from inserted;--這句必須寫動(dòng)態(tài)sql中時(shí)找不到inerted這個(gè)邏輯表的

  select @min_id = max(ordinal_position) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @tabname;

  select @total = count(1) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @tabname;

   while(@row_count <= @total)

  begin

    select @temp_name = column_name,@temp_type = data_type from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @tabname and      ordinal_position = @min_id;

    if(@temp_type = 'int')

    begin

      declare @temp_in int;

      SET @sql = 'select @temp_in = ' + @temp_name + ' from temps;';

      EXEC SP_EXECUTESQL @Sql, N'@temp_in int OUTPUT', @temp_in OUTPUT;

      set @xmlnode_value = convert(varchar(100),@temp_in);

      set @temp_value = @xmlnode_value;

      set @temp_pre_name = 'i' + @temp_name;

    end

    else if(@temp_type = 'float')

    begin

      declare @temp_inf float;

      SET @sql = 'select @temp_inf = ' + @temp_name + ' from temps;';

      EXEC SP_EXECUTESQL @Sql, N'@temp_inf float OUTPUT', @temp_inf OUTPUT;

      set @xmlnode_value = convert(varchar(100),@temp_inf);

      set @temp_value = @xmlnode_value;

      set @temp_pre_name = 'f' + @temp_name;

    end

    else if(@temp_type = 'decimal')

    begin

      declare @temp_ind float;

      SET @sql = 'select @temp_ind = ' + @temp_name + ' from temps;';

      EXEC SP_EXECUTESQL @Sql, N'@temp_ind decimal(18,0) OUTPUT', @temp_ind OUTPUT;

      set @xmlnode_value = convert(varchar(100),@temp_ind);

      set @temp_value = @xmlnode_value;

      set @temp_pre_name = 'd' + @temp_name;

    end

    else

    begin

      declare @temp_inc varchar(200);

      SET @sql = 'select @temp_inc = ' + @temp_name + ' from temps;';

      EXEC SP_EXECUTESQL @Sql, N'@temp_inc varchar(200) OUTPUT', @temp_inc OUTPUT;

      set @xmlnode_value = convert(varchar(100),@temp_inc);

      set @temp_value = '''' + @xmlnode_value + '''';

      set @temp_pre_name = 'c' + @temp_name;

    end

    --生成插入/修改操作相關(guān)數(shù)據(jù)信息的xml表示

    set @optinfo = @optinfo + '<' + @temp_pre_name + '>';

    set @optinfo = @optinfo + @xmlnode_value;

    set @optinfo = @optinfo + '';

    if @id_i is not null and @id_d is null -- 插入操作

    begin

      --生成插入操作執(zhí)行的sql語(yǔ)句

      if(@temp_name <> @pkname)

      begin

        set @sql_name = @sql_name + ',' + @temp_name;

        set @sql_value = @sql_value + ',' + @temp_value;

      end

    end

    else if @id_i is not null and @id_d is not null --更新操作

    begin

      --生成修改操作執(zhí)行的sql語(yǔ)句

      if(@temp_name <> @pkname)

      begin

        set @sql_name = @sql_name + ',' + @temp_name + '=' + @temp_value;

      end

    end

    select @min_id = ordinal_position from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'course' and ordinal_position < @min_id;

    set @row_count = @row_count + 1;

  end

  if @id_i is not null and @id_d is null -- 插入操作

  begin

    --生成執(zhí)行插入操作的sql語(yǔ)句

    set @opttype = 0;

    set @optsql = 'insert into ' + @tabname + '(' + substring(@sql_name,2,len(@sql_name)) + ')' + ' values(' + substring(@sql_value,2,len     (@sql_value)) +')';

  end

  else if @id_i is not null and @id_d is not null --更新操作

  begin

    --生成執(zhí)行修改操作的sql語(yǔ)句

    set @opttype = 3;

    set @optsql = 'update ' + @tabname + ' set ' + substring(@sql_name,2,len(@sql_name)) + ' where ' + @pkname + '=' + @pkvalue;

  end

drop table temps;

end

set @xmlstr = '';

set @xmlstr = @xmlstr + ''; set @xmlstr = @xmlstr + '' + convert(varchar(3),@opttype) + '';

set @xmlstr = @xmlstr + '' + @tabname + '';

set @xmlstr = @xmlstr + '' + @pk_pre_name + '';

set @xmlstr = @xmlstr + ''; set @xmlstr = @xmlstr + '';

set @xmlstr = @xmlstr + @optinfo;

set @xmlstr = @xmlstr + '';

set @xmlstr = @xmlstr + '';

select @optip=client_net_address from sys.dm_exec_connections where Session_id=@@spid;

if(@pkvalue is null)

begin

  set @pkvalue = -1;

end

insert into optlog values(@tabname,@pkname,@pkvalue,@opttype,@optip,getdate(),@optsql,@xmlstr);

print '操作執(zhí)行成功';

end

紅色標(biāo)注的部分我認(rèn)識(shí)是實(shí)現(xiàn)的難點(diǎn),就是用到了sqlserver的系統(tǒng)存儲(chǔ)過(guò)程sp_executesql,具體的用法網(wǎng)上有的可以查下,這只是我的一家之言,或許大家還有很好的實(shí)現(xiàn),歡迎大家提意見(jiàn)?。∥抑肋@里很多大牛,可能我的想法會(huì)比較拙劣,但希望能夠幫助到大家,只此記錄我的技術(shù)成長(zhǎng)歷程。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

觸發(fā)器實(shí)現(xiàn)記錄操作表的日志

觸發(fā)器實(shí)現(xiàn)記錄操作表的日志:這個(gè)功能我是琢磨了好久,本來(lái)我的sqlserver方面的知識(shí)深入了解的就不多,關(guān)鍵的難點(diǎn)是用變量代替字段名,然后獲取字段在表中存的值,再賦給另外一個(gè)變量,我之所以這么做,因?yàn)楹竺婧脦滋幰玫竭@個(gè)字段的名稱,我才用變量代替,便于修改,可就是 實(shí)現(xiàn) 花費(fèi)
推薦度:
標(biāo)簽: 記錄 操作 功能
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 垫江县| 光山县| 隆安县| 普宁市| 禄丰县| 绍兴县| 安国市| 揭阳市| 鲁甸县| 呼图壁县| 彰武县| 咸宁市| 忻州市| 惠来县| 凭祥市| 华坪县| 永川市| 贵港市| 黔南| 施秉县| 乌拉特中旗| 华亭县| 大名县| 安国市| 靖边县| 那曲县| 高尔夫| 乐亭县| 鄯善县| 柯坪县| 民县| 南华县| 杨浦区| 若羌县| 浪卡子县| 三台县| 将乐县| 宁武县| 邛崃市| 牡丹江市| 邯郸市|