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

時間 2021-10-15 00:22:10

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'

sql2005儲存過程中變數的使用

yf在你的儲存過程中是定義了,但是在 sql中沒有定義,當你執行 sql的時候,外面定義的變數在裡面是無效的。給你3點建議。1.能不用動態sql儘量不要用,因為系統沒法給你預先確定執行計劃,所以動態sql是不高效的。2.既然你用了動態sql,那麼複雜的判斷邏輯就不要放在 sql 裡面了。而是放在外面...

oracle 儲存過程中in條件傳引數

樓上的可以,不過有些語法錯誤,我改改,呵呵 create or replace procedure pd1 p 1 number,p 2 number,p 3 number isv sql varchar2 4000 begin v sql select from table where id in...

ASP編寫過程中的SQL查詢問題

sql select from users where username text 改為 樓主這裡的使用者應該是字元吧 上述sql語句不正確,故下面的rs.recordcount也不顯示0 dim text,password text trim request.form text password ...