關於更新SQLserver統計資訊的儲存過程

2021-09-07 12:32:03 字數 2192 閱讀 5937

1、建立t_mon_table_stat 用於存過需要更新統計資訊的表

2、查詢需要更新統計資訊的表

insert into t_mon_table_stat

select distinct sp.rows/ssi.rowmodctr rowdiff,

object_name(si.object_id) as table_name ,

si.name as statistics_name ,

stats_date(si.object_id, si.index_id) as last_stat_update_date ,

ssi.rowmodctr as rowmodctr ,

sp.rows as total_rows_in_table ,

\'update statistics [\' + schema_name(so.schema_id) + \'].[\'

+ object_name(si.object_id) + \']\' + space(2) + si.name as update_stats_script ,current_timestamp,0,null

from sys.indexes as si( nolock )

inner join sys.objects as so( nolock ) on si.object_id = so.object_id

inner join sys.sysindexes ssi( nolock ) on si.object_id = ssi.id

and si.index_id = ssi.indid

inner join sys.partitions as sp on si.object_id = sp.object_id

where ssi.rowmodctr > 0

and stats_date(si.object_id, si.index_id) is not null

and so.type = \'u\'

and abs(sp.rows-ssi.rowmodctr)>10000

and (sp.rows/ssi.rowmodctr <0.4 or sp.rows/ssi.rowmodctr >2.5)

and object_name(si.object_id) not like \'%history_%\' --排除歷史表

and stats_date(si.object_id, si.index_id)< dateadd(dd,-2,getdate()) --最近7天未更新統計資訊

and object_name(si.object_id) not like \'%-%\'

3、建立儲存過程

create procedure dbo.p_mon_upate_table_statistics

as begin

declare

@datetime datetime

set @datetime=getdate()

declare update_tab_stat_cur cursor for select distinct table_name ,update_stats_script,check_date from t_mon_table_stat

where check_date>dateadd(dd,-1,@datetime) and check_date0

begin

---更新update_date 和 check_status的值

update a set a.update_date=getdate(),a.check_status=2 from t_mon_table_stat a where a.check_date =@check_date and a.table_name =@table_name and check_status=1;

end

fetch next from update_tab_stat_cur into @table_name ,@sql ,@check_date

end---關閉游標

close update_tab_stat_cur

---釋放游標資源

deallocate update_tab_stat_cur

end

4、然後將改儲存過程放到作業裡面去就ok

關於sqlserver除錯

現在很多企業使用資料庫內部處理過程進行程式設計。這樣的好處是對後來維護的人員可以方便修改。資料庫指令碼也是解析語句,不用編譯生產exe等檔案,直接可以執行。隨著儲存過程的複雜性越來越大,在除錯的時候也有困難。例如 儲存過程的臨時表如何檢視?1 要在本資料庫伺服器上除錯。不能遠端除錯 2 使用sa和 ...

sqlserver 統計及格率

id sid sjname res 1 1 數學 80 2 1 數學 50 3 2 英語 61 4 2 英語 59 5 3 語文 58 6 3 語文 58 7 1 數學 81 id是學生id sid 老師 sjname 科目 res 分數 最後要求結果是 老師 總人數 及格人數 及格率 1 3 2 ...

SqlServer的更新鎖 UPDLOCK

updlock.updlock 的優點是允許您讀取資料 不阻塞其它事務 並在以後更新資料,同時確保自從上次讀取資料後資料沒有被更改。當我們用updlock來讀取記錄時可以對取到的記錄加上更新鎖,從而加上鎖的記錄在其它的執行緒中是不能更改的只能等本執行緒的事務結束後才能更改,我如下示例 begin t...