sql儲存過程中根據判斷拼接sql語句然後執行

時間 2021-10-15 00:19:43

1樓:雨夜ぜ狂想

/* 我給你舉一個構造sql語句的例子,首先把sql語句計算出來,然後再執行這個計算出來的sql語句

*/ declare @lssql nvarchar(1024),@a varchar(10),@b varchar(10),@c varchar(32)

set @a='select'

set @b='*'

set @c= 'from person'

set @lssql=''+@a+' '+@b+' '+@c+''    --得出sql語句

execute sp_sqlexec @lssql --執行構造好的sql語句

2樓:

begin

select count(*) into 變數1 from 表a where列名=param1;

if (判斷條件) then

select 列名 into 變數2 from 表a where列名=param1;

dbms_output。put_line(『列印資訊』);

elsif (判斷條件) then

dbms_output。put_line(『列印資訊』);

else

raise 異常名(no_data_found);

end if;

exception

when others then

rollback;

end;

3樓:匿名使用者

不知道你為什麼要這樣寫,,,

if ***

sql1

select count() xx from sql1endelse

sql2

select ***x from sql2***為什麼不採用這種方式?

如果非要拼接,還要定義@變數,

你後續還是要判斷from後面引用哪個,

因為from 後面是沒有 a or b的寫法的

4樓:匿名使用者

exec ('select count(*) from ('+sql語句1或2+')')

oracle 用if sqlcode != 0 來判斷sql語句是否成功 sqlserver 儲存過程 怎樣判斷一條sql語句執行成功了沒有

5樓:匿名使用者

返回執行的上一個 transact-sql 語句的錯誤號。

transact-sql 語法約定

語法@@error

返回型別

integer

備註如果前一個 transact-sql 語句執行沒有錯誤,則返回 0。

如果前一個語句遇到錯誤,則返回錯誤號。如果錯誤是 sys.messages 目錄檢視中的錯誤之一,則 @@error 將包含 sys.

messages.message_id 列中表示該錯誤的值。可以在 sys.

messages 中檢視與 @@error 錯誤號相關的文字資訊。

由於 @@error 在每一條語句執行後被清除並且重置,因此應在語句驗證後立即檢視它,或將其儲存到一個區域性變數中以備以後檢視。

使用 try...catch 構造來處理錯誤。try...

catch 構造也支援其他返回的錯誤資訊多於 @@error 的系統函式(error_line、error_message、error_procedure、error_severity 和 error_state)。try...catch 也支援 error_number 函式,但不限制該函式在語句產生錯誤後立即在語句中返回錯誤號。

有關詳細資訊,請參閱 try...catch (transact-sql)。

示例a. 用 @@error 檢測一個特定錯誤

以下示例用 @@error 在 update 語句中檢測約束檢查衝突(錯誤 #547)。

複製**

use adventureworks;

goupdate humanresources.employeepayhistory

set payfrequency = 4

where employeeid = 1;

if @@error = 547

print n'a check constraint violation occurred.';

gob. 用 @@error 有條件地退出一個過程

在此示例中,if...else 語句在儲存過程中的 insert 語句後檢測 @@error。@@error 變數的值將決定傳送給呼叫程式的返回**,以指示此過程的成功與失敗。

複製**

use adventureworks;

go-- drop the procedure if it already exists.

if object_id(n'humanresources.usp_deletecandidate', n'p') is not null

drop procedure humanresources.usp_deletecandidate;

go-- create the procedure.

create procedure humanresources.usp_deletecandidate

(@candidateid int)as

-- execute the delete statement.

delete from humanresources.jobcandidate

where jobcandidateid = @candidateid;

-- test the error value.

if @@error <> 0

begin

-- return 99 to the calling program to indicate failure.

print n'an error occurred deleting the candidate information.';

return 99;

endelse

begin

-- return 0 to the calling program to indicate success.

print n'the job candidate has been deleted.';

return 0;

end;

goc. 與 @@rowcount 一同使用 @@error

下面的示例用 @@error 和 @@rowcount 驗證一條 update 語句的操作。為任何可能出現的錯誤而檢驗 @@error 的值,而用 @@rowcount 保證更新已成功應用於表中的某行。

6樓:匿名使用者

儲存過程一般都用sqlstate來做判斷的。

if sqlstate = '00000' then success

sqlstate的含義比sqlcode要豐富得多,譬如找不到紀錄,或者遊標到達末尾,sqlstate = '02000'

在sql儲存過程中如何宣告變數賦值變數最好有

追夢的一個男孩 sql server 儲存過程中怎麼將變數賦值 sql賦值語句 declare test1 int select test1 111 set test1 222 sql函式賦值,假定count 是自定義函式declare test2 int select test2 count fr...

oracle儲存過程中update語句一直在執行中無法更

仙戈雅 嘗試更改sql指令碼如下所示 create or replace procedure test wz in yf in varchar2 isv yf varchar 50 begin v yf in yf update log insert 不要用別名set zfsjdc date sys...

怎樣判斷溶解過程中是吸熱還是放熱

初中化學 溶解時的吸熱和放熱現象 大多數的溶解過程是吸熱的,但是也有很多物質溶解的時候放出熱量,這個需要具體物質具體分析,還有就是溶劑,溶質也有關係。在物質溶解過程中,既有與水結合成為水合離子的過程,這一過程中放熱過程,也有水合離子運動的過程,是吸收熱量的過程,那最終是放熱,還是吸熱,取決於這兩個過...