存儲過程判斷存在
㈠ sqlServer存儲過程判斷select a表的結果是否存在,存在就輸出結果,不存在就執行另一段select b表
ifexists(select*froma)
select*froma
else
select*fromb
㈡ 在存儲過程中,判斷一個臨時表是否存在,怎樣寫
臨時表可以創建本地和全局臨時表。本地臨時表僅在當前會話中可見;全局臨時表在所有會話中都可見。 本地臨時表的名稱前面有一個編號符 (#table_name),而全局臨時表的名稱前面有兩個編號符 (##table_name)。 SQL 語句使用 CREATE TABLE 語句中為 table_name 指定的名稱引用臨時表: CREATE TABLE #MyTempTable (cola INT PRIMARY KEY) INSERT INTO #MyTempTable VALUES (1) 如果本地臨時表由存儲過程創建或由多個用戶同時執行的應用程序創建,則 SQL Server 必須能夠區分由不同用戶創建的表。為此,SQL Server 在內部為每個本地臨時表的表名追加一個數字後綴。存儲在 tempdb 資料庫的 sysobjects 表中的臨時表,其全名由 CREATE TABLE 語句中指定的表名和系統生成的數字後綴組成。為了允許追加後綴,為本地臨時表指定的表名 table_name 不能超過 116 個字元。 除非使用 DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去: 當存儲過程完成時,將自動除去在存儲過程中創建的本地臨時表。由創建表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用創建此表的存儲過程的進程無法引用此表。 所有其它本地臨時表在當前會話結束時自動除去。 全局臨時表在創建此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個 Transact-SQL 語句的生存周期內保持。換言之,當創建全局臨時表的會話結束時,最後一條引用此表的 Transact-SQL 語句完成後,將自動除去此表。 在存儲過程或觸發器中創建的本地臨時表與在調用存儲過程或觸發器之前創建的同名臨時表不同。如果查詢引用臨時表,而同時有兩個同名的臨時表,則不定義針對哪個表解析該查詢。嵌套存儲過程同樣可以創建與調用它的存儲過程所創建的臨時表同名的臨時表。嵌套存儲過程中對表名的所有引用都被解釋為是針對該嵌套過程所創建的表,例如: CREATE PROCEDURE Test2ASCREATE TABLE #t(x INT PRIMARY KEY) INSERT INTO #t VALUES (2) SELECT Test2Col = x FROM #tGOCREATE PROCEDURE Test1ASCREATE TABLE #t(x INT PRIMARY KEY) INSERT INTO #t VALUES (1) SELECT Test1Col = x FROM #tEXEC Test2GOCREATE TABLE #t(x INT PRIMARY KEY) INSERT INTO #t VALUES (99)GOEXEC Test1GO 下面是結果集: (1 row(s) affected)Test1Col-----------1 (1 row(s) affected)Test2Col-----------2 當創建本地或全局臨時表時,CREATE TABLE 語法支持除 FOREIGN KEY 約束以外的其它所有約束定義。如果在臨時表中指定 FOREIGN KEY 約束,該語句將返回警告信息,指出此約束已被忽略,表仍會創建,但不具有 FOREIGN KEY 約束。在 FOREIGN KEY 約束中不能引用臨時表。 考慮使用表變數而不使用臨時表。當需要在臨時表上顯式地創建索引時,或多個存儲過程或函數需要使用表值時,臨時表很有用。通常,表變數提供更有效的查詢處理。有關更多信息,請參見 table。
㈢ 用存儲過程循環判斷傳進來的數組中的某一項在數據中是否存在
createprocereoap_dect(
inoutp_arrayvarchar(255),#通過(,)分隔符傳遞數組
outp_resultvarchar(255)#返回信息
)
begin
declarev_douhaoint(10)default0;
declarev_resultint(10)default0;
declarev_countint(10)default0;
declarev_datavarchar(255)default'';
declarev_data_infovarchar(40)default'';
setv_douhao=instr(v_data,',');
while(v_douhao>=1)
do
setv_count=v_count+1;
setv_data_info=substring(v_data,1,v_douhao-1);
selectcount(*)
intov_result
fromtable_name
wherefield_name=v_data_info;
setp_result=p_result+1;
setv_data_str=substring(v_data,v_douhao+1);
setv_fenhao=instr(v_data_str,',');
endwhile;
if(p_result<v_count)
setp_result=false;
else
setp_result=true;
endif;
end
㈣ 如何判斷存儲過程是否存在在存儲過程
----sqlserver判斷
if (exists (select * from sys.objects where name = '存儲過程名稱'))
drop proc proc_test
go
create.....
----oracle判斷
select status from all_objects where object_type = 'PROCEDURE' and OWNER='用戶名' and object_name='存儲過程名';
or
select status from user_objects where object_type = 'PROCEDURE' and object_name='存儲過程名';
㈤ 如何判斷存儲過程是否存在
直接右鍵,如果沒有edit,view等選項,那麼這個過程肯定不存在,或者create一個和這個存儲過程同名的過程,如果報錯,說明已經存在。
㈥ 如何創建存儲過程中判斷一張表是否存在,如果存在向下執行,如果不存在,則返回
ORACLE:
DECLARE
A NUMBER;
BEGIN
select count(*) INTO A from user_tables where table_name = '....';
if a >0 then
return 1;//存在
else
return 0;
end if;
EXCEPTION WHEN OTHER THEN
NULL;
END;
㈦ 如何在存儲過程中判斷ID=某個值的數據是否存在,在.net程序中獲取存儲過程返回的值
存儲過程
create proc UP_CheckUser
(
@col_id int,
@Result int output
)
as
begin
begin try
select * from 表名 where col_id=@col_id
if(@@rowcount=0)
begin
select @Result=1
end
else
begin
select @Result=0
end
end try
begin catch
select @Result=0
end catch
end
go
後台文件:
SqlParameter[] sp = new SqlParameter[2];
sp[0] = new SqlParameter("@col_id", col_id);
sp[1] = new SqlParameter("@Result", SqlDbType.Int);
sp[1].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery(CommandType.StoredProcere, "CheckUser", sp);
int nResult = Convert.ToInt32(sp[1].Value);
if (nResult == 0)
{
return 0;
}
else
{
return 1;
}
希望能對你有點用
㈧ SQL創建存儲過程中 if exists 是什麼意思
SQL創建存儲過程中 if exists的意思是「是否存在」,判斷某個存儲過程是否存在,如果存在就刪除,如果不存在就創建。
--創建存儲過程
if (exists (select * from sys.objects where name = 'proc_get_student'))
drop proc proc_get_student
go
create proc proc_get_student
as
select * from student;
--調用、執行存儲過程
exec proc_get_student;
1、 存儲過程的優點
A、 存儲過程允許標准組件式編程
存儲過程創建後可以在程序中被多次調用執行,而不必重新編寫該存儲過程的SQL語句。而且資料庫專業人員可以隨時對存儲過程進行修改,但對應用程序源代碼卻毫無影響,從而極大的提高了程序的可移植性。
B、 存儲過程能夠實現較快的執行速度
如果某一操作包含大量的T-SQL語句代碼,分別被多次執行,那麼存儲過程要比批處理的執行速度快得多。因為存儲過程是預編譯的,在首次運行一個存儲過程時,查詢優化器對其進行分析、優化,並給出最終被存在系統表中的存儲計劃。而批處理的T-SQL語句每次運行都需要預編譯和優化,所以速度就要慢一些。
C、 存儲過程減輕網路流量
對於同一個針對資料庫對象的操作,如果這一操作所涉及到的T-SQL語句被組織成一存儲過程,那麼當在客戶機上調用該存儲過程時,網路中傳遞的只是該調用語句,否則將會是多條SQL語句。從而減輕了網路流量,降低了網路負載。
D、 存儲過程可被作為一種安全機制來充分利用
系統管理員可以對執行的某一個存儲過程進行許可權限制,從而能夠實現對某些數據訪問的限制,避免非授權用戶對數據的訪問,保證數據的安全。
㈨ sql存儲過程 如何用IF來判斷變數表內數據是否存在
可以定義一個變數接收值
declare @A as varchar(max),@count integer
select @A='select @count = count(*) from '+ @變數表 + ' where 姓名='+@姓名
exec(@A)
if @count > 0
...
㈩ Oracle存儲過程驗證一個記錄是否存在怎麼寫
select count(*)
into ...
from ..
where ...
判斷一下就是了,
或者有游標打開並fetch一次,判斷
curXXX%found