1樓:育知同創教育
sql server中sql語句執行錯誤直接會丟擲異常,在應用中捕獲異常即可。
實時監控sql錯誤:
檢視 sql server 錯誤日誌可以確保程序(例如,備份和還原操作、批處理命令或其他指令碼和程序)成功完成。此功能可用於幫助檢測任何當前或潛在的問題領域,包括自動恢復訊息(尤其是在 sql server 例項已停止並重新啟動時)、核心訊息或其他伺服器級錯誤訊息。
使用 sql server management studio 或任何文字編輯器可以檢視 sql server 錯誤日誌。預設情況下,錯誤日誌位於 program files\microsoft sql server\mssql.n\mssql\log\errorlog 和 errorlog.
n 檔案中。
每當啟動 sql server 例項時,將建立新的錯誤日誌,雖然 sp_cycle_errorlog 系統儲存過程可用於迴圈使用錯誤日誌檔案,而不必重新啟動 sql server 例項。通常,sql server 保留前六個日誌的備份,並指定最近日誌備份的副檔名為 .1、下一個最近日誌備份的副檔名為 .
2,依次類推。當前的錯誤日誌沒有副檔名。
2樓:匿名使用者
如果在transact-sql中發生了錯誤,一般有兩種捕捉錯誤的方法,一種是在客戶端**(如c#、delphi等)中使用類似try...catch的語句進行捕捉;另外一種就是在transact-sql中利用transact-sql本身提供的錯誤捕捉機制進行捕捉。如果是因為transact-sql語句的執行而產生的錯誤,如鍵值衝突,使用第一種和第二種方法都可以捕捉,但是如果是邏輯錯誤,使用客戶端**進行捕捉就不太方便。
因此,本文就如何使用transact-sql進行錯誤捕捉進行了討論。
非致命錯誤(non-fatal error)的捕捉
通過執行transact-sql而產生的錯誤可分為兩種:致命錯誤(fatal error)和非致命錯誤(non-fatal error)。在transact-sql中只可以捕捉非致命錯誤(如鍵值衝突),而無法捕捉致命錯誤(如語法錯誤)。
在transact-sql中可以通過系統變數@@error判斷最近執行的一條語句是否成功執行。如果發生了錯誤,@@error的值大於0,否則值為0。下面舉一個例子說明@@error的使用。
假設有一個表table1,在這個表中有兩個欄位f1,f2。其中f1是主鍵。
insertintotable1values(1,'aa')insertintotable1values(1,'bb')--這條語句將產生一個錯誤if@@error0print'鍵值衝突' 當執行第二條語句時發生鍵值衝突錯誤,@@error被賦為錯誤號2627,因此輸出結果顯示'鍵值衝突'。使用@@error系統變數時需要注意,@@error只記錄最近一次執行的transact-sql語句所發生的錯誤,如果最近一次執行的transact-sql沒有發生錯誤,@@error的值為0。因此,只能在**捉的那條transact-sql語句後使用@@error。
在sql server中,不僅可以捕捉系統提供的錯誤,還可以自定義錯誤。有兩種方法可以定義錯誤資訊。
1. 使用sp_addmessage系統儲存過程新增錯誤資訊,然後使用raiserror丟擲錯誤。
sp_addmessage將錯誤號,錯誤級別、錯誤描述等資訊新增到系統表中,然後使用raiserror根據相應的錯誤號丟擲錯誤資訊。使用者自定義的資訊應該從50001開始。 execsp_addmessage@msgnum=50001,
@severity=16,@msgtext='sql encounter an error(%s).',@lang='us_english'execsp_addmessage@msgnum=50001,
@severity=16,@msgtext='sql遇到了一個錯誤(%1!).' 如果使用的sql server版本是非英語版本,在新增本地錯誤資訊時必須首先新增英文的錯誤資訊。
錯誤描述可以象c語言中的printf的格式字串一樣使用引數,如%s、%d。但要注意的是在英文版的錯誤資訊中要使用%s、%d等形式,而在本地化的錯誤資訊中要使用%1!、%2!
等形式,在每個%?(1 <= ? <= n)後需要加一個!
,而且%?的數目必須和英文版的錯誤資訊的引數一致。
在未插入本地化錯誤資訊時,raiserror將使用英文版的錯誤資訊。當插入本地化錯誤資訊時,raiserror使用本地化的錯誤資訊。
raiserror(50001,16,1,'測試')
輸出的結果:
伺服器: 訊息50001
,級別16
,狀態1
,行1sql遇到了一個錯誤(測試).
其中'測試'字串通過%1傳入本地化的錯誤描述字串中。
2. 直接使用raiserror將錯誤丟擲。
使用第一種方法雖然使transact-sql語句看上去更整潔(這種方法類似於在程式語言中使用常量定義錯誤資訊,然後在不同的地方通過錯誤編號引用這些錯誤資訊。),但是這樣做卻使錯誤資訊和資料庫的耦合度增加,因為如果將這些帶有raiserror的transact-sql放到別的sql server資料庫上執行,由於在其它的資料庫中還未新增錯誤資訊,因此會產生raiserror呼叫錯誤,除非使用sp_addmessage將所需的錯誤資訊再加入到其它的資料庫中。
基於上述原因,raiserror不僅可以根據錯誤**丟擲錯誤資訊,也可以直接通過錯誤描述格式字串丟擲錯誤資訊。
sql server 怎樣使用sql輸出建表語句
如何將sqlserver表中的資料匯出sql語句或生成insert into語句
3樓:千鋒教育
參考如下語句 select 'insert into table(column,column,column) values('+id+',''' + name+''','''+url+''')' from table其中,兩個單引號表示一個引號的意思。生成資料列表後樣式 insert into table(column,column,column) values(00101,'***xx,'******')insert into table(column,column,column) values(00102,'***xx','******') 複製語句 執行即可。 我當初測試系統配置資料就是這樣弄到正式機的,將資料弄成文字形式的sql,僅供參考。
如何將excel匯入sql server
方法 步驟 1 開啟sql server management studio,按圖中的路徑進入匯入資料介面。2 匯入的時候需要將excel的檔案準備好,不能開啟。點選下一步。3 資料來源 選擇 microsoft excel 除了excel型別的資料,sql還支援很多其它資料來源型別。4 選擇需要匯...
如何將SQL server 2019裡的查詢結果匯出到Excel表內
查詢完之後在結果欄裡按ctrl a將結果全選,按右鍵選擇 將結果另存為.然後儲存為 csv 檔案,就可以用excel開啟了。或者 連同標題一起復制 然後將結果拷貝到excel表中就可以了。1 首先開啟sql server 2008 應用程式,進入到程式操作頁面中,選擇需要編輯的表。2 然後在彈出來的...
在sql server中如何將獲取日期和時間值賦值給變數
可用如下方法 declare time datetime 定義變數select time getdate 獲取當前日期時間並賦值給變數 print time 輸入列印變數內容執行結果 如果覺得顯示不方便,可將時間型別的內容進行轉換,儲存過程寫法可改為 declare time varchar 20 ...