好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 如何將sql執行的錯誤消息記錄到本地文件中實現過程

如何將sql執行的錯誤消息記錄到本地文件中實現過程

熱門標簽:美團地圖標注商戶認證注冊 榕城市地圖標注 怎么給高德做地圖標注 承德地圖標注公司名需要花錢嗎 浙江穩定外呼系統供應商 咸陽電腦外呼系統運營商 北京400電話辦理多少錢 慶陽地圖標注 電銷外呼系統軟件功能

其實大家都知道sql語句的錯誤信息都可以在sys.messages表里面找到

如:

如果在執行語句在try...catch中 我們可以通過以下方法獲取錯誤信息。sql語句如下:

復制代碼 代碼如下:

BEGIN TRY
SELECT 3 / 0
END TRY
BEGIN CATCH
DECLARE @errornumber INT
DECLARE @errorseverity INT
DECLARE @errorstate INT
DECLARE @errormessage NVARCHAR(4000)
SELECT @errornumber = ERROR_NUMBER() ,
@errorseverity = ERROR_SEVERITY() ,
@errorstate = ERROR_STATE() ,
@errormessage = ERROR_MESSAGE()

SELECT @errornumber ,
@errorseverity ,
@errorstate ,
@errormessage

RAISERROR (
@errormessage, -- Message text,
@errorseverity, -- Severity,
@errorstate, -- State,
@errornumber
);
END CATCH

當然我這里是故意用RAISERROR再次拋出錯誤信息,運行結果如下:

現在我們來定義一個存儲過程,其目的就是往本地文件中寫入信息。

sql腳本如下:

復制代碼 代碼如下:

CREATE Proc [dbo].[UCreateOrAppendTextFile](@Filename VarChar(100),@Text nVarchar(4000))
AS
DECLARE @FileSystem int
DECLARE @FileHandle int
DECLARE @RetCode int
DECLARE @RetVal int
DECLARE @CreateOrAppend int

EXECUTE @RetCode = sp_OACreate 'Scripting.FileSystemObject' , @FileSystem OUTPUT
IF (@@ERROR|@RetCode > 0 Or @FileSystem 0)
RAISERROR ('could not create FileSystemObject',16,1)
EXECUTE @RetCode = sp_OAMethod @FileSystem , 'FileExists', @RetVal out, @FileName
IF (@@ERROR|@RetCode > 0)
RAISERROR ('could not check file existence',16,1)
-- If file exists then append else create
SET @CreateOrAppend = case @RetVal when 1 then 8 else 2 end
EXECUTE @RetCode = sp_OAMethod @FileSystem , 'OpenTextFile' , @FileHandle OUTPUT , @Filename, @CreateOrAppend, 1
IF (@@ERROR|@RetCode > 0 Or @FileHandle 0)
RAISERROR ('could not create File',16,1)
EXECUTE @RetCode = sp_OAMethod @FileHandle , 'WriteLine' , NULL , @text
IF (@@ERROR|@RetCode > 0 )
RAISERROR ('could not write to File',16,1)
EXECUTE @RetCode = sp_OAMethod @FileHandle , 'Close'
IF (@@ERROR|@RetCode > 0)
RAISERROR ('Could not close file ',16,1)
EXEC sp_OADestroy @filehandle
IF (@@ERROR|@RetCode > 0)
RAISERROR ('Could not destroy file object',16,1)
EXEC sp_OADestroy @FileSystem

----------------------------------------
然后執行該存儲過程:
復制代碼 代碼如下:

exec UCreateOrAppendTextFile 'C:\Error.log','hello majaing'

如果遇到以下錯誤則說明Ole Automation Procedures沒有啟用

需要執行以下SQL:

復制代碼 代碼如下:

go
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

運行即如果如圖:

當然這里運行存儲過程之前必須保證 文件是存在的

最后封裝一個存儲過程獲取錯誤信息,其腳本如下:

復制代碼 代碼如下:

CREATE PROCEDURE LOGError(@msg nvarchar(400))
as
declare @text nvarchar(400)
SELECT @text=text FROM sys.messages WHERE language_id=1033 AND message_id=@@ERROR
if len(@text)>1
begin
set @msg=@msg +' : '+@text
EXEC dbo.UCreateOrAppendTextFile 'C:\Error.log',@msg
end

執行存儲過程及結果如下:

以上存儲過程在MSSQL2005、2012中測試通過。

大家都知道目前在文件系統中事務的實現還是比較復雜的,雖然在win7后我們可以用C#實現文件的事務,但是微軟的分布式事務Distributed Transaction Coordinator(msdtc)目前也還不支持文件事務。

這里說說為什么有這樣的需求吧:目前需要一個項目用SSIS做數據遷移,其中很大部分都是用sql語句實現的, 如 insert into ....select ... from xxxx.其中原數據庫中難免有什么臟數據導致插入失敗,于是我在SSIS中使用msdtc服務,保證數據的一致性。雖然SSIS也有錯誤處理,但是它只能記錄那個sql語句有問題,而不能記錄具體問題。于是我想到把錯誤信心記錄報數據庫表里面,可是當遇到問題時事務會回滾,表里面根本就沒有錯誤信息。于是乎 只能報錯誤信息記錄到文件中了。

如:

有不對的地方還請大家拍磚哦!

標簽:重慶 呼和浩特 昭通 貴州 上海 新鄉 拉薩 江蘇

巨人網絡通訊聲明:本文標題《如何將sql執行的錯誤消息記錄到本地文件中實現過程》,本文關鍵詞  如何,將,sql,執,行的,錯誤,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何將sql執行的錯誤消息記錄到本地文件中實現過程》相關的同類信息!
  • 本頁收集關于如何將sql執行的錯誤消息記錄到本地文件中實現過程的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 扒开屁股缝鞭打臀缝惨叫| 欧美在线aa| 嘟嘟嘟高清视频www| 娇妻趴跪着掀裙子光屁股姜罚| 丰满熟女白浆大屁股精品Av| 啊啊啊用力啊啊| 亚洲美女色图| 日韩一区二区三区在线播放| 办公室双腿打开揉弄在爽文| 五月婷婷色| 亚洲网址在线观看| 是发小也要做po| 717午夜伦电影理伦片左右脸| 3d无修超肉动漫在线播放 | 特黄特色大片免费视频app| 思思久久99热| 我让藏獒×了两个小时的故事| 一夜未拔H圆房~h| 欧美AV蜜桃一区二区蜜桃| 夜色爽爽影院localhost| 把女人弄得特爽黄A大片| free性videos西欧极品| 日日摸夜夜添夜夜添爱摸摸漫画| 色就色s94亚洲| 欧美经典人人爽人人爽人人片| 在线黄色网页| 爱情岛官网论坛一号二号三号| 香蕉片视频在线观看| 3766漫画APP安卓版| 欧美mv日韩mv最火的一句歌词 黑白| 巜少妇4激情婬乱A片| blacked欧美黑粗硬大free| 麻豆视频免费| 粉嫩喷水视频| 一群黑人强四个女人| 9久热在线精品996热视频怎么用| 被多人道具调教玩弄NP| 桃子视频免费观看完整版高清全文| 国产精品黑料吃瓜网曝事件海角| 久久99精品久久久久久清纯直播| 91国久拍偷拍一区二区vids|