存儲過程與SQL語句是怎樣的
我的一位朋友說:他從臺灣知名技術作家李維先生的一本書中獲悉,如果用存儲過程封裝SQL語句,系統效率將有極大提升。
他做過實驗!!! --我相信朋友做過實驗,盡管非親眼所見。不過我估計他的實驗有問題,那樣的實驗不但蒙蔽了他,也蒙蔽了李維先生(如果他的著作中的內容沒有被誤會),甚至更多的人。
然而我必須拿出證據,方能使人信服。 后來遇到一個具體的問題:客戶端經常要向數據庫插入記錄。
在J2EE中,一個 Entity Bean Home 的 create 方法調用中,一般就沒用存儲過程。朋友立馬在觀點上持反對意見( 可能是因為他暫時有來得及否決J2EE ),認為要是J2EE能夠將“插入記錄”諸如此類動作改為對存儲過程的調用就好了。
我們因此再次發生爭論(我僅是反對朋友的看法,但也沒提出任何我自己的看法,因為要下一個結論是很不容易的)。最后我不得已而做了實驗,分別在 Oracle 10g 和 postgreSQL 8。
0。1 上。
實驗內容如下: A、建表腳本: create table ztest( fieldA integer primary key, fieldB varchar(128), fieldC varchar(128) ) B、客戶端請求 DBMS 執行的 insert SQL語句: insert into ztest values( ?1, ?2, ?3 ); -- ?1,?2,?3 將在運行時以合理的值替代之 C、客戶端調用的存儲過程(JDBC CallableStatement 調用): Oracle:(調用方式 call up_add(。 。
。),) create or replace procedure up_add( fieldA integer, fieldB varchar, fieldC varchar ) is begin insert into ztest values( fieldA, fieldB, fieldC); end; postgreSQL:(客戶端調用方式 select uf_add(。
。
) ) CREATE OR REPLACE FUNCTION uf_add (integer, varchar, varchar) RETURNS void AS' begin insert into ztest values($1,$2,$3); return; end; 'LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER; D、環境: postgreSQL:數據庫服務器與客戶端程序“都在本機”并“同時運行” Oracle: 獨立數據庫服務器(測試時始終有人在慢慢打字,應該對機器性能無影響) 測試: 通過不同方式( 即 請求DBMS執行SQL語句 和 調用DBMS邏輯等價的存儲過程)向測試表中連續加入 1024 記錄 經多次反復測試,得結果如下 postgreSQL: 兩種方式下,測試時間均為 21- 24 seconds 之間 (每個結果的測試環境一致) Oracle: 8次 SQL 執行請求分別用時(ms) 5422 4750 3875 3812 5672 3531 3484 3547 6次 存儲過程調用分別用時(ms) 4578 4500 6297 4219 4547 5734 (每個結果的測試環境一致)由此可知,存儲過程封裝簡單的 SQL 語句,效率相當,且可能更低。 但很多朋友的確得出結論:存儲過程的確比SQL快。
為什么?---- 因為他們測試時寫了一個不具實際意義,同時也與SQL語句的“一次客戶端調用”不具可比性的測試用存儲過程。Oracle PL/SQL 描述方式如下,該方法一次調用就可以向數據表添加 1024 條記錄,連網絡通訊都省了。
怪不得性能有“千倍差異”! create or replace procedure up_add( ) is declare n:integer; begin n := 0; while( n 它與客戶端一次提交單條 SQL 語句沒有可比性:當一次只需要向DBMS提交一條新記錄,要這個存儲過程干什么呢?。
SQLServer語句和存儲過程是怎樣的
--列出SQL SERVER 所有表,字段名,主鍵,類型,長度,小數位數等信息 --在查詢分析器里運行即可,可以生成一個表,導出到EXCEL中 -- ====================================================== SELECT (case when a。
colorder=1 then d。name else ' end)表名, a。
colorder 字段序號, a。name 字段名, (case when COLUMNPROPERTY( a。
id,a。name,'IsIdentity')=1 then '√'else ' end) 標識, (case when (SELECT count(*) FROM sysobjects WHERE (name in (SELECT name FROM sysindexes WHERE (id = a。
id) AND (indid in (SELECT indid FROM sysindexkeys WHERE (id = a。id) AND (colid in (SELECT colid FROM syscolumns WHERE (id = a。
id) AND (name = a。name))))))) AND (xtype = 'PK'))>0 then '√' else ' end) 主鍵, b。
name 類型, a。length 占用字節數, COLUMNPROPERTY(a。
id,a。name,'PRECISION') as 長度, isnull(COLUMNPROPERTY(a。
id,a。name,'Scale'),0) as 小數位數, (case when a。
isnullable=1 then '√'else ' end) 允許空, isnull(e。 text,') 默認值, isnull(g。
[value],') AS 字段說明 FROM syscolumns a left join systypes b on a。xtype=b。
xusertype inner join sysobjects d on a。 id=d。
id and d。xtype='U' and d。
name'dtproperties' left join syscomments e on a。cdefault=e。
id left join sysproperties g on a。 id=g。
id AND a。colid = g。
smallid order by a。id,a。
colorder ------------------------------------------------------------------------------------------------- 列出SQL SERVER 所有表、字段定義,類型,長度,一個值等信息 并導出到Excel 中 -- ====================================================== -- Export all user tables definition and one sample value -- jan-13-2003,Dr。 Zhang -- ====================================================== 在查詢分析器里運行: SET ANSI_NULLS OFF GO SET NOCOUNT ON GO SET LANGUAGE 'Simplified Chinese' go DECLARE @tbl nvarchar(200),@fld nvarchar(200),@sql nvarchar(4000),@maxlen int,@sample nvarchar(40) SELECT d。
name TableName,a。name FieldName,b。
name TypeName,a。length Length,a。
isnullable IS_NULL INTO #t。
使用SQL語句創建存儲過程
使用SQL語句創建存儲的具體過程如下:
1、首先,打開企業管理器,選擇【工具】-【查詢分析器】:
2、然后,輸入SQL語句。如下:
CREATE PROCEDURE byroyalty1 @percentage int
AS
select au_id from titleauthor
where *yper = @percentage
GO
3、然后,點擊確定之后,命令就會自動添加進查詢中:
4、然后執行一下剛輸入的命令:
5、最后,就可以在彈出的小窗口中查看存儲過程了:
sql 存儲過程查詢語句
在數據庫中先創建存儲過程!具體代碼如下:
create proc sp_GetTesttableByname --sp_GetTesttableByname代表存儲過程名稱
as
begin
SELECT nickname,email FROM testtable WHERE name='張三' --存數過程的查詢語句
end
go
exec sp_GetTesttableByname; --查詢存儲過程結果
按下F5執行以上代碼之后 然后再在項目中寫調用存儲過程語句!希望我的回答對你有所幫助,謝謝采納!
怎么查看一個存儲過程的SQL語句
查看一個存儲過程的SQL語句步驟如下:
1、開啟Microsoft SQL Server數據庫管理工具,輸入賬號密碼連接到數據庫。
2、如果數據庫服務器上有多個數據庫,選擇我們要查看的數據庫,展開其選項。
3、 在數據庫展開的菜單中,找到‘可編程性’菜單,并將其展開。
4、在‘可編程性’菜單下面,找到‘存儲過程’并單擊其前面的‘+’號,讓其展開。這里可以看見系統自帶存儲過程和用戶自己編譯的存儲過程。
5、在要管理的存儲過程名稱上單擊鼠標右鍵,依次選擇:‘編寫存儲過程腳本為’--->'Alter到'--->;'新的查詢編輯器窗口'。這個動作是修改存儲過程。
6、這時,我們就能清楚的看見這個存儲過程的代碼,可以做修改,修改后記得保存才能生效。
在SQL中存儲過程的一般語法是什么
1、 創建語法 create proc | procedure pro_name [{@參數數據類型} [=默認值] [output], {@參數數據類型} [=默認值] [output], 。
. ] as SQL_statements 2、 創建不帶參數存儲過程 --創建存儲過程 if (exists (select * from *s where name = 'proc_get_student')) drop proc proc_get_student go create proc proc_get_student as select * from student; --調用、執行存儲過程 exec proc_get_student; 3、 修改存儲過程 --修改存儲過程 alter proc proc_get_student as select * from student; 4、 帶參存儲過程 --帶參存儲過程 if (object_id('proc_find_stu', 'P') is not null) drop proc proc_find_stu go create proc proc_find_stu(@startId int, @endId int) as select * from student where id between @startId and @endId go exec proc_find_stu 2, 4; 5、 帶通配符參數存儲過程 --帶通配符參數存儲過程 if (object_id('proc_findStudentByName', 'P') is not null) drop proc proc_findStudentByName go create proc proc_findStudentByName(@name varchar(20) = '%j%', @nextName varchar(20) = '%') as select * from student where name like @name and name like @nextName; go exec proc_findStudentByName;exec proc_findStudentByName '%o%', 't%'; 擴展資料: SQL存儲過程優點: 1、重復使用。存儲過程可以重復使用,從而可以減少數據庫開發人員的工作量。
2、減少網絡流量。存儲過程位于服務器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網絡傳輸的數據量。
3、安全性。參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke權限應用于存儲過程。
參考資料來源:百度百科—存儲過程。
用sql寫一個簡單的存儲過程語句
CREATE procedure Sp_select_Time
@Teacher_ID char(12),
@ReplyTime char(20),
@returnTimeVal int output
as
begin
if exists(select *
from
TeacherReply
where Teacher_ID=@Teacher_ID and ReplyTime=@ReplyTime)
set @returnTimeVal=0
else
set @returnTimeVal=1
end
return
GO