當前位置:首頁 » 服務存儲 » 資料庫有參數的存儲過程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫有參數的存儲過程

發布時間: 2023-05-17 15:19:49

A. 資料庫存儲過程怎麼寫

1,調用沒有參數的存儲過程
<%
set conn=server.CreateObject("adodb.connection")
set cmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"

conn.Open strconn
set cmd.ActiveConnection=conn

cmd.CommandText="{call nono}"

'set rs=cmc.exe 或者cmd.execute

set rs=cmd.Execute()

%>
2,一個輸入的參數的存儲過程
<%
set conn=server.CreateObject("adodb.connection")
set cmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"

conn.Open strconn
set cmd.ActiveConnection=conn

cmd.CommandText="{call oneinput(?)}"
cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger ,adParamInput )
cmd("@aaa")=100

cmd.Execute()

%>
3,一個輸入參數和一個輸出的參數
<%
set conn=server.CreateObject("adodb.connection")
set cmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"

conn.Open strconn
set cmd.ActiveConnection=conn

cmd.CommandText = "{call oneinout(?,?)}"
cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger,adParamInput)
cmd("@aaa")=10
cmd.Parameters.Append cmd.CreateParameter("@bbb",adInteger,adParamOutput)

cmd.Execute()

bbb=cmd("@bbb")
%>
4,一個輸入參數,一個輸出參數,和一個返回值
<%
set conn=server.CreateObject("adodb.connection")
set cmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"

conn.Open strconn
set cmd.ActiveConnection=conn

cmd.CommandText="{?=call onereturn(?,?)}"

cmd.Parameters.Append cmd.CreateParameter("@return_value",adInteger,adParamReturnValue )
cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger,adParamInput )
cmd("@aaa")=10
cmd.Parameters.Append cmd.CreateParameter("@bbb",adInteger,adParamOutput)

cmd.Execute()

bbb=cmd("@bbb")
rrr=cmd("@return_value")
%>

B. 資料庫的帶有參數的存儲過程的創建 急 考試!!!

CREATE PROCEDURE P1
@XH VARCHAR(10),@XM VARCHAR(10) OUTPUT,@XB CHAR(2) OUTPUT,@ZY VARCHAR(10) OUTPUT,@X VARCHAR(20) OUTPUT AS
SELECT @XM=姓名,@XB=性別,@ZY=專業裂肆,@X=所在系
FROM 學生表 WHERE 學號=@XH
go

--調用
DECLARE @XM VARCHAR(10),@XB CHAR(2),@ZY VARCHAR(10),@X VARCHAR(20)
EXECUTE P1 'S001',@XM OUTPUT,@XB OUTPUT,@ZY OUTPUT,@X OUTPUT
PRINT '姓名:'+@XM+'性別:'+@XB+'專業:'+@ZY+'所在系睜旅:肆早轎'+@x

C. 資料庫存儲過程是什麼

問題一:sql資料庫中的存儲過程該怎麼理解 有什麼用啊? 存儲過程是SQL 語句和流程式控制制語句的預編譯 *** ,以一個名稱存儲並作為一個單元處理。存儲過程存儲在資料庫內,可由應用程序調用執行,而且允許用戶聲明變數、有條件執行以及其它強大的編程功能。

問題二:資料庫中什麼是存儲過程?作用是什麼? 存儲過程,就是帶有名字的一個程序塊。
存儲,是指這個程序塊創建了之後,是存儲在資料庫內部的,然後我們可以在自己寫的程序中通過某種手段去調用這段程序,然後這段程序就會做一件事,做什麼事?我們定義存儲過程的時候怎麼寫的,它到時候就做什麼;
過程,就是程序塊,說白了就是一段程序。
存儲過程,創建完成之後,就存儲在資料庫內部了,資料庫幫你記著,存儲過程創建的時候都有一個名字,將來你在你的程序當中,通過某種方式(不同編程語言有不同的方式),一般來講通過這個名字,去調用存儲過程,就像使用一個方法或者函數一樣,它就去做一件事!
不同的資料庫的存儲過程,都是用當前自己這個資料庫的編程語言來編寫的,比如Oracle的PL/SQL編程,等等。
自己寫一個就明白了,語法不用我多說了吧?

問題三:什麼叫作資料庫的存儲過程? 存儲過程就是將常用的或很復雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來,並且這樣的語句是放在資料庫中的,還可以根據條件執行不同SQL語句, 那麼以後要叫資料庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。 存儲過程的優點 1.存儲過程只在創造時進行編譯即可,以後每次執行存儲過程都不需再重新編譯,而我們通常使用的SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。 2.經常會遇到復雜的業務邏輯和對資料庫的操作,這個時候就會用SP來封裝資料庫操作。當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。可以極大的提高資料庫的使用效率,減少程序的執行時間,這一點在較大數據量的資料庫的操作中是非常重要的。在代碼上看,SQL語句和程序代碼語句的分離,可以提高程序代碼的可讀性。 3.存儲過程可以設置參數,可以根據傳入參數的不同重復使用同一個存儲過程,從而高效的提高代碼的優化率和可讀性。 4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權存儲過程的種類: (1)系統存儲過程:以sp_開頭,用來進行系統的各項設定.取得信息.相關管理工作,如 sp_help就是取得指定對象的相關信息。 (2)擴展存儲過程 以XP_開頭,用來調用操作系統提供的功能exec master..xp_cmdshell 'ping 10.8.16.1' (3)用戶自定義的存儲過程,這是我們所指的存儲過程常用格式 模版:Create procere procee_name [@parameter data_type][output][with]{repile|encryption} as sql_statement 解釋:output:表示此參數是可傳回的 with {repile|encryption} repile:表示每次執行此存儲過程時都重新編譯一次;encryption:所創建的存儲過程的內容會被加密。

問題四:資料庫中存儲過程有什麼主要作用,或都說它的主要用途? 存儲過程的概念
存儲過程(Stored Procere)是一組預先編繹好的Transact-SQL語句。將其放在伺服器上,由用戶通過指定存儲過程的名字來執行它。存儲過程可以作為一個獨立的資料庫對象,也可以作為一個單元被用戶的應用程序調用。存儲過程可以接收和輸出參數,返回執行存儲過程的狀態值,還可以嵌套調用。
存儲過程同其他編程語言中的過程(Procere)類似,主要體現在以下幾個方面:
(1)存儲過程可以接收參數,並以接收參數的形式返回多個參數給調用存儲過程和批處理。
(2)包含執行資料庫操作的編程語句,也可以調用其他的存儲過程。
(3)向調用過程或批處理返回狀態值,以反映存儲過程的執行情況。
注意:存儲過程跟函數不同,存儲過程不能在被調用的位置上返回數據,也不能被應用在語句當中,例如不可以用類似「@Proc=存儲過程名」的方式使用存儲過程。但是,存儲過程可以使用變數的形式來返回參數。
存儲過程的優點表現在以下幾個方面:
(1)執行速度快
存儲過程在創建時就經過了語法檢查和性能優化,因此在執行時不必再重復這些步驟。存儲過程在第一次調用後,就駐留在內存中,不必再經過編譯和優化,所以執行速度很快。在有大量批處理的Transact-SQL語句要重復執行的時候,使用存儲過程可以極大地提高運行效率。
(2)模塊化程序設計
只需創建存儲過程一次,並將其存儲在資料庫中,可以在程序中多次調用該存儲過程。用戶可以獨立於應用程序而對存儲過程進行修改。
(3)減少網路通信量
存儲過程中可以包含大量的Transact-SQL語句。在進行調用時,只需要使用一條語句就可以實現,而不需要在網路中發送數百行代碼。
(4)保證系統的安全性
可以設置用戶通過存儲過程來對某些關鍵數據進行訪問,但不允許用戶直接使用Transact-SQL語句或企業管理器來對數據進行訪問。

問題五:資料庫存儲過程和函數的區別 函數分兩種,表值函數跟標量函數
表值函數最後要返回一個表變數,而標量函數最後要返回一個標量值
存儲過程即一組批處理,可以返回或不返回值,僅僅是執行其內部的全部語句
函數可以與一般sql語句一同編寫,而存儲過程不可以,需要單獨執行

問題六:資料庫編輯存儲過程是什麼意思 一般來說,程序員都希望編寫出來的程序能有最大化的應變能力,存儲過程的最大作用是可以降低代碼維護的工作量,很多需求的變化不用修改代碼進而發布程序,而只需要調整一下存儲過程即可實現
例如你打算開發一個報表,該報表會對資料庫的數據進行一定程度的加工,然後再呈現給用戶,那麼你的實現方法有兩個
1. 使用代碼調用SQL,取到基礎數據後,在程序代盯裡面進行加工,並呈現給用戶
2. 也可以編寫一段存儲過程,該存儲過程先取基礎數據,然後在存儲過程裡面進行數據加工,最後把最終的結果一次性的反饋給程序代碼,程序代碼只需要把執行完存儲過程的結果呈現給用戶即可
這兩個方法都可以實現你想實現的功能,但是如果萬一有一天需求變化了,用戶需要呈現的結果中增加或者減少了部分內容,那麼第一個方法就只能修改代碼了,而第二個方法只需要調整存儲過程即可實現

問題七:在SQL中存儲過程的一般語法是什麼? sql server存儲過程語法
存儲過程就是作為可執行對象存放在資料庫中的一個或多個SQL命令。
定義總是很抽象。存儲過程其實就是能完成一定操作的一組SQL語句,只不過這組語句是放在資料庫中的(這里我們只談SQL Server)。如果我們通過創建存儲過程以及在ASP中調用存儲過程,就可以避免將SQL語句同ASP代碼混雜在一起。這樣做的好處至少有三個:
第一、大大提高效率。存儲過程本身的執行速度非常快,而且,調用存儲過程可以大大減少同資料庫的交互次數。
第二、提高安全性。假如將SQL語句混合在ASP代碼中,一旦代碼失密,同時也就意味著庫結構失密。
第三、有利於SQL語句的重用。

在ASP中,一般通過mand對象調用存儲過程,根據不同情況,本文也介紹其它調用方法。為了方便說明,根據存儲過程的輸入輸出,作以下簡單分類:
1. 只返回單一記錄集的存儲過程
假設有以下存儲過程(本文的目的不在於講述T-SQL語法,所以存儲過程只給出代碼,不作說明):
/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go
以上存儲過程取得userinfo表中的所有記錄,返回一個記錄集。通過mand對象調用該存儲過程的ASP代碼如下:

'**通過mand對象調用存儲過程**
DIM Mym,MyRst
Set Mym = Server.CreateObject(ADODB.mand)
Mym.ActiveConnection = MyConStr 'MyConStr是資料庫連接字串
Mym.mandText = getUserList '指定存儲過程名
Mym.mandType = 4 '表明這是一個存儲過程
Mym.Prepared = true '要求將SQL命令先行編譯
Set MyRst = Mym.Execute
Set Mym = Nothing
存儲嘩程取得的記錄集賦給MyRst,接下來,可以對MyRst進行操作。
在以上代碼中,mandType屬性表明請求的類型,取值及說明如下:
-1 表明mandText參數的類型無法確定
1 表明mandText是一般的命令類型
2 表明mandText參數是一個存在的表名稱
4 表明mandText參數是一個存儲過程的名稱

還可以通過Connection對象或Recordset對象調用存儲過程,方法分別如下:
'**通過Connection對象調用存儲過程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject(&qu......>>

問題八:T-SQL和存儲過程有什麼區別 20分 區別T-SQL是語言,存儲過程是資料庫一種對象
T-SQL 即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增強版,它是用來讓應用程式與 SQL Server 溝通的主要語言。
Transact-SQL中的存儲過程,非常類似於Java語言中的方法,它可以重復調用。當存儲過程執行一次後,可以將語句緩存中,這樣下次執行的時候直接使用緩存中的語句。這樣就可以提高存儲過程的性能。
? 存儲過程的概念
存儲過程Procere是一組為了完成特定功能的SQL語句 *** ,經編譯後存儲在資料庫中,用戶通過指定存儲過程的名稱並給出參數來執行。
存儲過程中可以包含邏輯控制語句和數據操縱語句,它可以接受參數、輸出參數、返回單個或多個結果集以及返回值。
由於存儲過程在創建時即在資料庫伺服器上進行了編譯並存儲在資料庫中,所以存儲過程運行要比單個的SQL語句塊要快。同時由於在調用時只需用提供存儲過程名和必要的參數信息,所以在一定程度上也可以減少網路流量、簡單網路負擔。

問題九:資料庫存儲過程怎麼調用存儲過程 在存儲過程里用exec執行另一存儲過程名及它需要的參數就可以了
如 exec abc '1', '2' (abc 是存儲過程的名字, '1','2' 是它的參數)

D. sql server 中 一個要輸入參數和輸出參數的存儲過程。

1、首先我們需要打開SQL Server Managment管理工具,新建一個表。

E. 在MySQL中如何創建一個帶輸出參數為一個表類型的存儲過程

在MySQL中如何創建一個帶輸出參數為一個搭滑擾表類型的存儲過程
首先需要知道「另一個存儲過程」的結果集的所有列的類型。
假設「另一個存儲過程」的名字是sp1,沒有參數,返回的結果集共3列,全部為int型,那麼「存儲過程」里添加一個與結果集列數相同的臨知旦時表或表變數用於接收「另一個存儲過程」的結果集
如下
CREATE PROCEDURE sp2
AS
DECLARE @t table(a int,b int,c int)

INSERT INTO @t(a,b,c)
EXEC sp1

SELECT * FROM @t
使用SQLSERVER存儲過程可以很大的提高程序運行速度,簡化編程維護難度,現已得到廣泛應用。
創建存儲過程
和數據表一樣,在使用之前需要創建存儲過程,它的簡明語法是:

引用:
Create PROC 存儲過程名稱
[參數列表(多個以「,」分隔)]
AS
SQL 語句

例:

引用:
Create PROC upGetUserName
@intUserId INT,
@ostrUserName NVARCHAR(20) OUTPUT -- 要輸出的參數
AS
BEGIN
-- 將uName的值賦給 @ostrUserName 變數,即要輸出的參讓鎮數
Select @ostrUserName=uName FROM uUser Where uId=@intUserId
END

其中 Create PROC 語句(完整語句為Create PROCEDURE)的意思就是告訴SQL SERVER,現在需要建立一個存儲過程,upGetUserName 就是存儲過程名稱,@intUserId 和 @ostrUserName 分別是該存儲過程的兩個參數,注意,在SQL SERVER中,所有用戶定義的變數都以「@」開頭,OUTPUT關鍵字表示這個參數是用來輸出的,AS之後就是存儲過程內容了。只要將以上代碼在「查詢分析器」里執行一次,SQL SERVER就會在當前資料庫中創建一個名為「upGetUserName」的存儲過程。你可以打開「企業管理器」,選擇當前操作的資料庫,然後在左邊的樹型列表中選擇「存儲過程」,此時就可以在右邊的列表中看到你剛剛創建的存儲過程了(如果沒有,刷新一下即可)。
二、存儲過程的調用

之前已經創建了一個名為「upGetUserName」的存儲過程,從字面理解該存儲過程的功能是用來取得某一個用戶的名稱。存儲過程建立好了,接下來就是要在應用程序里調用了,下面看一下在ASP程序里的調用。

F. SQL Server 如何執行 帶參數的 存儲過程

帶參數的存儲過程執行方法如下:

(1)調用通用數據訪問類:SqlHelper,執行SqlHelper.ExecuteNonQuery()方法

(2)使敬譽春用示例:SqlHelper.ExecuteNonQuery(conn,CommandType.StoredProcere,sqlexec,myparm)

(3)其中傳遞的4個參數如下:

「conn」:為鏈接字元

「CommandType.StoredProcere」:表示要執亮耐行的SQL存儲過程類型

「sqlexec」:要執行的SQL存儲過程

「myparm」:為傳遞的參虛沖數,它需要參數的初始化、賦予參數名稱、設定類型、長度和值等

(4)當ExecuteNonQuery()執行select 查詢時,結果總是返回-1。ExecuteNonQuery()執行Update、Insert和Delete語句時,返回值為該命令所影響的行數。

G. 我在sql server2008資料庫裡面創建了一個帶參數的存儲過程,在VS裡面調用,明明給了參數,為什麼還報錯

作為第一個參數,也將NEWID()也放入喚睜遲存儲過程試試。
下面是sql幫助中的說明:
SQL函數中不能使用「不確定函數」,只要是早橋每次執行都返回不同結和李果的函數都無法使用,這些「不確定函數」會導致自定義的函數也變得不確定,而SQL不支持用戶編寫「不確定函數」。

H. 帶參數的存儲過程如何去寫誰給舉個例子

寫帶有參數存儲過程應該是sql資料庫的問題:
先建立一個表,並添加一些數據來陸辯進行演示:
create
table
t_student(
id
int
not
null,
name
nvarchar
(10)
null,
age
tinyint
null,
school
nvarchar(20)
null,
class
nvarchar(10)
null,
score
float
null,
constraint
[pk_student_id]
primary
key
clustered(id)
)
go
insert
into
t_student
values(1,'張小紅',8,'育才小學','一班',92)
insert
into
t_student
values(2,'王麗麗',8,'育才小學','一班',90)
insert
into
t_student
values(3,'張燕',7,'雲華小學','二班',86)
insert
into
t_student
values(4,'劉華',6,'雲華小學','二班',85)
一、exec
exec命令可以執行一個存儲過程也可以執行一個動態sql語句。先來看看怎麼執行存儲過程:
新建一個存儲過程
sp_getstudent
,返回
成績大於90
分的學生:
create
procere
[dbo].[sp_getstudent]
@score
float,
@nums
int
output
as
begin
set
nocount
on;
select
*
from
t_student
where
score
>=@score
select
@nums=count(1)
from
t_student
where
score
>=@score
if(@nums>0)
return
1
else
return
0
end
go
該存儲過程涉及了
查詢操作、返回值和輸出參數,我們來看用exec
命令如何調用:
declare
@return_value
int,
@outnums
int
exec
@return_value
=
[dbo].[sp_getstudent]
@score
=
90,
@nums
=
@outnums
output
select
@outnums
as
n'大於90分的人數'早李缺
select
'返回值'
=
@return_value
go
執行結果:
我們發現exec
執行存儲過程和我們平時程序執行一個方法是幾乎一樣的,返回值參數
直接就可以等於存儲過程的擾拍執行後的返回值,輸出參數
在後面需要增加
output
關鍵字。

I. sql資料庫中怎樣調用帶參數的存儲過程

1、使用SQL語句

--a)方式一
--exec存儲過程名稱參數名='值'
execP_Titles_ByType@type='business'
go
--b)方式二
--exec存儲過程名稱參數值
execP_Titles_ByType'business'



2、可視化操作

a.在資料庫中找到要執行的存儲過程

b.右擊存儲過程,在出現的菜單中選擇執行存儲過程選項

c.在新出現的對話框中,在對應的參數後面的值列填入對應的參數值

d.填寫完參數值,最後點擊確定,然後查詢結果會出現


圖-b

J. Sqlserver2005資料庫如何寫帶參數的存儲過程

給褲友你一個我以前做過的例子吧。有什麼不會的可以交流一下
創建一個存儲過程展胡蔽槐示學生成績排名
輸入參數:考試代碼、班級編碼、科目編碼
要求:如果班級為*,則表示所有班級
如果科目為*,則表示所有科目
--存儲過並猛程
if exists(select * from dbo.sysobjects where name='studentpm'and xtype='p')
begin
drop PROCEDURE [studentpm]
end
go
CREATE PROCEDURE studentpm @SCNo varchar(10),@CLNo varchar(10),@CNo varchar(10),@sMsg varchar(200) out
AS
declare @SQL varchar(8000)
Begin
if not exists(select * from Score sc,Class cl,Cource co,Student st
where sc.SNo=st.SNo and sc.CNo=co.CNo and cl.CLNo=st.SClassNo and sc.SCNo=@SCNo)
begin
SET @sMsg='考試代碼不存在'
--print(@sMsg)
return (-1)
end
set @SQL='select st.SName,sc.SCGrade,sc.SCNo from Score sc,Class cl,Cource co,Student st
where sc.SNo=st.SNo and sc.CNo=co.CNo and cl.CLNo=st.SClassNo'
if (@CLNo<>'*')
set @sql=@sql +' and cl.CLNo='''+@CLNo+''''
if @CNo<>'*'
set @sql=@sql +' and co.CNo='''+@CNo+''''
set @sql=@sql+' order by sc.SCGrade desc'
print (@sql)
exec (@sql)
Return 1
End
go
調用:
declare @sMsg varchar(200)
declare @iRtn int
EXEC MyTestDB.DBO.studentpm '003','002','002',@sMsg out
EXEC MyTestDB.DBO.studentpm '003','*','*',@sMsg out
EXEC @iRtn=MyTestDB.DBO.studentpm '004','*','*',@sMsg out
--print(@iRtn)
print(@sMsg)