sql編譯與重編譯

2021-05-10 17:12:31 字數 1983 閱讀 6829

sql

編譯與重編譯

1.sp_recompile

使儲存過程和觸發器在下次執行時重新編譯。

2.sp_refreshview

如果檢視所依賴的基礎物件發生更改(如:表增加了乙個字段),則檢視不會自動更新,這時需要呼叫該儲存過程來對檢視進行重新整理。有人說,重新開啟一下檢視就可以更新檢視,但我試了沒有成功。

例1:重新整理指定名稱的檢視

sp_refreshview 'v_tblitem' 例

2:重新整理整個資料庫中的所有檢視

create

procedure [dbo].[_proc_checkview](

@isdelete bit

=0 --

是否要刪除無效的檢視 )

as begin

declare @vname sysname

;declare @errormessage nvarchar

(200);

declare @count int

;set @count=0;

declare @errorcount int

;set @errorcount=0;

create

table #temp(

viewname nvarchar

(776)

)declare refresh_cursor cursor

forselect

name

from sysobjects

where xtype =

'v'and category=0

order

by crdate

forread only

open refresh_cursor

fetch next from refresh_cursor

into @vname

while

@@fetch_status

= 0

begin

begin

tryexec sys.sp_refreshview @vname

endtrybegin

catch

insert

into #temp(viewname)

values

(@vname)

set @errorcount=@errorcount+1 if

(@isdelete=1)

begin

declare @sql nvarchar

(500)

set @sql=

'drop view'

+ @vname

exec

sp_executesql @sql

endendcatch

set @count=@count+1;

fetch next from refresh_cursor

into @vname

endclose refresh_cursor

deallocate refresh_cursor

if(@errorcount>0)

begin

select

'本次共檢查檢視【'+

convert

(nvarchar

(20),@count)+

'】個,其中有【'+

convert

(nvarchar

(20),@errorcount)+

'】個無效,無效檢視參見下表:'

select

*from #temp

endelse

begin

select

'本次共檢查檢視【'+

convert

(nvarchar

(20),@count)+

'】個,全部有效。'

end

drop

table #temp

end go

SQLSERVER編譯與重編譯

編譯的含義 當sqlserver收到任何乙個指令,包括查詢 query 批處理 batch 儲存過程 觸發器 trigger 預編譯指令 prepared statement 和動態sql語句 dynamic sql statement 要完成語法解釋 語句解釋,然後再進行 編譯 compile 生...

SQLSERVER編譯與重編譯

編譯的含義 當sqlserver收到任何乙個指令,包括查詢 query 批處理 batch 儲存過程 觸發器 trigger 預編譯指令 prepared statement 和動態sql語句 dynamic sql statement 要完成語法解釋 語句解釋,然後再進行 編譯 compile 生...

sql server 編譯與重編譯詳解

sqlserver編譯與重編譯 編譯的含義 當sqlserver收到任何乙個指令,包括查詢 query 批處理 batch 儲存過程 觸發器 trigger 預編譯指令 prepared statement 和動態sql語句 dynamic sql statement 要完成語法解釋 語句解釋,然後...