❶ sql server異常怎麼處理
你可以看一下異常謝謝,然後根據異常信息進行處理。
你可以在這里貼出一場信息,這樣比較容易得到答案。
異常信息一般在操作sql時彈出
在系統日誌裡面也可以查看
❷ 掃健康碼SQL運行異常怎麼辦
解釋如下。
在程序中,有時候完成一些Transact-SQL會出現錯誤、異常信息。如果我們想自己處理這些異常信息的話,需要手動捕捉這些信息。那麼我們可以利用trycatch完成。
TRY?CATCH構造包括兩部分:一個TRY塊和一個CATCH塊。如果在TRY塊中所包含Transact-SQL語句中檢測到錯誤條件,控制將被傳遞到CATCH塊(可在此塊中處理該錯誤)。
CATCH塊處理該異常錯誤後,控制將被傳遞到ENDCATCH語句後面的第一個Transact-SQL語句。如果ENDCATCH語句是存儲過程或觸發器中的最後一條語句,控制將返回到調用該存儲過程或觸發器的代碼。將不執行TRY塊中生成錯誤的語句後面的Transact-SQL語句。
如果TRY塊中沒有錯誤,控制將傳遞到關聯的ENDCATCH語句後緊跟的語句。如果ENDCATCH語句是存儲過程或觸發器中的最後一條語句,控制將傳遞到調用該存儲過程或觸發器的語句。
TRY塊以BEGINTRY語句開頭,以ENDTRY語句結尾。在BEGINTRY和ENDTRY語句之間可以指定一個或多個Transact-SQL語句。CATCH塊必須緊跟TRY塊。CATCH塊以BEGINCATCH語句開頭,以ENDCATCH語句結尾。在Transact-SQL中,每個TRY塊僅與一個CATCH塊相關聯。
❸ 發生sql異常如何處理
大量數據時建議使用存儲過程提高效率同時進行錯誤處理begin try
begin transaction
insert into types values(@typename,@blogman)
insert into bloginfo values(@blogman,@blogtitle,@blogcontent,@@identity,getdate(),0)
commit transaction
return @@identity
end try
begin catch
rollback transaction
return 0
end catch
❹ sql執行出錯,該怎麼解決
運行資料庫出現錯誤,解決步驟如下:
1、單擊「開始」—「所有程序」—「MS SQL Server 2008R2」;
2、選擇「Configuration tools」;
3、單擊「SQL Server Configuration Manager」,打開;
4、右鍵單擊「SQL Server(你的伺服器名字)」,單擊「啟動」;
5、啟動完成後,重新連接資料庫即可。
❺ MySQL異常處理淺析
MySQL的異常處理分析如下:
標准格式
DECLARE
handler_type
HANDLER
FOR
condition_value[,...]
statement
handler_type:
CONTINUE
|
EXIT
|
UNDO
--這個暫時不支持
condition_value:
SQLSTATE
[VALUE]
sqlstate_value
|
condition_name
|
SQLWARNING
|
NOT
FOUND
|
SQLEXCEPTION
|
mysql_error_code
condition_value細節
1、常用MYSQL
ERROR
CODE
列表
http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html
更多錯誤列表見MySQL安裝路徑下
比如我的/usr/local/mysql/share/mysql/errmsg.txt
說明一下:SQLSTATE
[VALUE]
sqlstate_value這種格式是專門為ANSI
SQL
和
ODBC以及其他的標准.
並不是所有的MySQL
ERROR
CODE
都映射到SQLSTATE。
2、如果你不想插ERROR
CODE的話,就用速記條件來代替
SQLWARNING
代表所有以01開頭的錯誤代碼
NOT
FOUND
代表所有以02開頭的錯誤代碼,當然也可以代表一個游標到達數據集的末尾。
SQLEXCEPTION
代表除了SQLWARNING和NOT
FOUND
的所有錯誤代碼
3、我們現在就用手冊上的例子
CREATE
TABLE
t
(s1
int,primary
key
(s1));
mysql>
use
t_girl
Database
changed
mysql>
CREATE
TABLE
t
(s1
int,primary
key
(s1));
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
mysql>
mysql>
DELIMITER
||
mysql>
CREATE
PROCEDURE
handlerdemo
()
->
BEGIN
->
DECLARE
EXIT
HANDLER
FOR
SQLSTATE
'23000'
BEGIN
END;
--
遇到重復鍵值就退出
->
SET
@x
=
1;
->
INSERT
INTO
t
VALUES
(1);
->
SET
@x
=
2;
->
INSERT
INTO
t
VALUES
(1);
->
SET
@x
=
3;
->
END||
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
DELIMITER
;
mysql>
call
handlerdemo();
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
@x;
+------+
|
@x
|
+------+
|
2
|
+------+
1
row
in
set
(0.00
sec)
mysql>
call
handlerdemo();
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
@x;
+------+
|
@x
|
+------+
|
1
|
+------+
1
row
in
set
(0.00
sec)
mysql>
現在來看一下遇到錯誤繼續的情況
mysql>
truncate
table
t;
Query
OK,
0
rows
affected
(0.01
sec)
mysql>
DELIMITER
$$
mysql>
DROP
PROCEDURE
IF
EXISTS
`t_girl`.`handlerdemo`$$
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
CREATE
DEFINER=`root`@`localhost`
PROCEDURE
`handlerdemo`()
->
BEGIN
->
DECLARE
CONTINUE
HANDLER
FOR
SQLSTATE
'23000'
BEGIN
END;
->
SET
@x
=
1;
->
INSERT
INTO
t
VALUES
(1);
->
SET
@x
=
2;
->
INSERT
INTO
t
VALUES
(1);
->
SET
@x
=
3;
->
END$$
Query
OK,
0
rows
affected
(0.01
sec)
mysql>
DELIMITER
;
mysql>
call
handlerdemo();
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
@x;
+------+
|
@x
|
+------+
|
3
|
+------+
1
row
in
set
(0.00
sec)
mysql>
call
handlerdemo();
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
@x;
+------+
|
@x
|
+------+
|
3
|
+------+
1
row
in
set
(0.00
sec)
mysql>
可以看到,始終執行到最後。
當然,上面的SQLSTATE
'23000'可以替換為1062
我們來看一下警告。
mysql>
alter
table
t
add
s2
int
not
null;
Query
OK,
0
rows
affected
(0.01
sec)
Records:
0
Duplicates:
0
Warnings:
0
此列沒有默認值,插入的時候會出現警告或者1364錯誤提示。
mysql>
DELIMITER
$$
mysql>
DROP
PROCEDURE
IF
EXISTS
`t_girl`.`handlerdemo`$$
Query
OK,
0
rows
affected,
1
warning
(0.00
sec)
mysql>
CREATE
DEFINER=`root`@`localhost`
PROCEDURE
`handlerdemo`()
->
BEGIN
->
DECLARE
CONTINUE
HANDLER
FOR
1062
BEGIN
END;
->
DECLARE
CONTINUE
HANDLER
FOR
SQLWARNING
->
BEGIN
->
update
t
set
s2
=
2;
->
END;
->
DECLARE
CONTINUE
HANDLER
FOR
1364
->
BEGIN
->
INSERT
INTO
t(s1,s2)
VALUES
(1,3);
->
END;
->
SET
@x
=
1;
->
INSERT
INTO
t(s1)
VALUES
(1);
->
SET
@x
=
2;
->
INSERT
INTO
t(s1)
VALUES
(1);
->
SET
@x
=
3;
->
END$$
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
DELIMITER
;
mysql>
call
handlerdemo();
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
*
from
t;
+----+----+
|
s1
|
s2
|
+----+----+
|
1
|
3
|
+----+----+
1
row
in
set
(0.00
sec)
遇到錯誤的時候插入的新記錄。
mysql>
select
@x;
+------+
|
@x
|
+------+
|
3
|
+------+
1
row
in
set
(0.00
sec)
❻ 執行transact-sql 語句或批處理時發生異常。
執行transact-sql 語句或批處理時發生異常是設置錯誤造成的,解決方法為:
1、打開HeidiSQL,選擇要操作的伺服器連接,然後點擊【打開】。
❼ 如何在SQL存儲過程中處理錯誤
1. 建立一個過程,第一個語句 DECLARE EXIT HANDLER是用來處理異常的,意思是如果錯誤 1216發生,這個程序將會在錯誤記錄表中插入一行,
EXIT的意思是 當動作成功提交後推出這個復合語句。
create procere p22(parameter int)
begin
declare exit Handler for 1452
insert into error_log values(concat('Time: ',current_date,'.Foreign key reference failure for value=',parameter));
insert into t3 values(parameter);
end;//
2. 申明異常處理的語法 DECLARE HANDLER syntax:
DECLARE {EXIT|CONTINUE} HANDLER FOR {error_number|{SQLSTATE error-string}|condition} SQL Statement
上面就是錯誤處理的用法,也就是一段當程序出錯後自動觸發的代碼,MYSQL允許兩種處理器,一種是exit處理,另外一種是 continue處理,與exit
不同的是在於他執行後,原主程序仍然繼續運行,那麼該復合語句就沒有出口了。
----continue處理的例子:
create table t4(s1 int primary key);//
create procere p23()
begin
declare continue handler for SQLSTATE '23000' set @x2=1;
set @x=1;
insert into t4 values (1);
set @x=2;
insert into t4 values(1);
set @x=3;
select @x, @x2;
end;//
call p23();//
---- rollback(回滾事務),定義自己的錯誤處理名字 declare '錯誤處理名' condition for SQLSTATE'23000';
create procere p24()
begin
declare ViolationSelf condition for SQLSTATE'23000';
DECLARE EXIT HANDLER for ViolationSelf rollback;
start transaction;
insert into t2 values(1);
insert into t2 values(1);
commit;
end;//
/******************************************** Cursor游標 **********************************************************/
游標實現功能的摘要: 聲明游標, 打開游標,從游標里讀取,關閉游標
DECLARE cursor-name CURSOR FOR SELECT ······
OPEN cursor-name;
FETCH cursor-name INTO variable;
CLOSE cursor-name;
1. create procere p25(out return_val int)
begin
DECLARE a,b,c int;
DECLARE cur_1 CURSOR for select s1 from t;
DECLARE continue handler for not found set b=1;
open cur_1;
set c=0;
repeat
fetch cur_1 into a;
until b=1
end repeat;
close cur_1;
set return_val=a;
end;//
2. create procere p25_1(out return_val int)
begin
DECLARE a,b,c int;
DECLARE cur_1 CURSOR for select s1 from t;
DECLARE continue handler for not found set b=1;
open cur_1;
set c=0;
lable_1:loop
fetch cur_1 into a;
if b=1 then
leave lable_1;
end if;
set c=c+1;
end loop;
close cur_1;
set return_val=c;
end;//
create procere p34(in va int)
begin
delete from t where s1=va;
end;//
❽ 在運行SQL時出現錯誤,請問如何解決
運行資料庫出現錯誤,解決步驟如下:
1、單擊「開始」—「所有程序」—「MS SQL Server 2008R2」;
2、選擇「Configuration tools」;
3、單擊「SQL Server Configuration Manager」,打開;
❾ 執行SQL語句或批處理發生異常怎麼解決【圖】
沒看到你的圖,不過一般的原因是
日誌文件
不存在,你可以手工建立一個同名的日誌文件。
❿ sql server 2008資料庫提示異常如何處理
如果說還可以創建資料庫。只是某個資料庫出現可疑,那就是我說的那兩個文件被刪或者移除追問:
一直在運行的啊!好好的
沒刪除啊!我用過很多辦法都不行啊
我脫離
然後再附加
曾經遇到這樣的問題!我試過把mdf拿去其他機,然後成功!我就備份bak回來原來新建
還原
都很順利!這次就是不行。回答:
是整個伺服器質疑還是只是一個資料庫?還能建庫嗎?既然禰有備份那就附加,如果附加不了估計就是伺服器問題。建議把sql重新裝下。估計就好了
有9個資料庫
,各種程序都有!同樣的程序的資料庫有三個,有兩個出問題!
之前出問題的也是同一種程序新裝sql的話,我全部停止幾個小時,肯定有損失的
而且麻煩!
我不能次次遇見這樣的問題就新裝sql吧!
我總要找個解決的辦法的啊
哪怕出現「可疑」後能夠備份bak資料庫也好!
我也經常用資料庫,也出現過質疑,基本就是我說的那兩種情況,我仔細想了下,既然是質疑,我想肯定那兩個備份文件伺服器默認找不到的緣故,只能是被移除或者更名但是禰又說備份在呢還可以附加。而且禰又有那麼多庫。不能停!禰給我截個圖吧。