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 ...