當前位置:首頁 » 存儲配置 » 如何寫存儲過程

如何寫存儲過程

發布時間: 2023-01-07 07:44:05

sql怎樣新建存儲過程

一:創建沒有參數的存儲過程:

CREATE PROCEDURE select_all

AS

BEGIN

SELECT * from T_login1

GO

二:創建帶參數的存儲過程:

CREATE PROCEDURE select_name

@id uniqueidentifier

AS

BEGIN

SELECT * from T_login1 where PSN0001A=@id

GO

(1)如何寫存儲過程擴展閱讀

創建存儲過程的注意事項:

1、保持事務簡短,事務越短,越不可能造成阻塞。

2、在事務中盡量避免使用循環while和游標,以及避免採用訪問大量行的語句。

3、在啟動事務前完成所有的計算和查詢等操作,避免同一事務中交錯讀取和更新。可以使用表變數預先存儲數據。即存儲過程中查詢與更新使用兩個事務實現。

4、超時會讓事務不執行回滾,超時後如果客戶端關閉連接sqlserver自動回滾事務。如果不關閉,將造成數據丟失,而其他事務將在這個未關閉的連接上執行,造成資源鎖定,甚至伺服器停止響應。

Ⅱ 如何編寫存儲過程

//創建存儲過程

CREATE PROCEDURE userData(

IN id INT

)

BEGIN

SELECT * from userdata WHERE userflag = id;

END;

其中IN是傳進去的變數;

drop procere userData;//銷毀這個存儲過程。

call userData(2) //調用存儲過程。

(2)如何寫存儲過程擴展閱讀:

sql中的存儲過程及相關介紹:

CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]

[(參數#1,…參數#1024)]

[WITH

{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}

]

[FOR REPLICATION]

AS 程序行

其中存儲過程名不能超過128個字。每個存儲過程中最多設定1024個參數

(SQL Server 7.0以上版本),參數的使用方法如下:

@參數名數據類型[VARYING] [=內定值] [OUTPUT]。

每個參數名前要有一個「@」符號,每一個存儲過程的參數僅為該程序內部使用,參數的類型除了IMAGE外,其他SQL Server所支持的數據類型都可使用。

[內定值]相當於我們在建立資料庫時設定一個欄位的默認值,這里是為這個參數設定默認值。[OUTPUT]是用來指定該參數是既有輸入又有輸出值的,也就是在調用了這個存儲過程時,如果所指定的參數值是我們需要輸入的參數。

同時也需要在結果中輸出的,則該項必須為OUTPUT,而如果只是做輸出參數用,可以用CURSOR,同時在使用該參數時,必須指定VARYING和OUTPUT這兩個語句。

參考資料來源:網路-儲存過程



Ⅲ 如何寫一個完整的存儲過程

其實我自己也沒先到會寫這篇文章 但是我還是寫了。。。。
首先 是定義

可以在外面嵌套一個循環 while Do end while 而標識位就是游標循環完成的判斷條件
當出現 『02000』時 執行 done =false 循環結束 存儲過程執行完畢
值得注意的是 執行SQL的預編譯語句時必須用用戶變數

Ⅳ 不同的指標在不同的表,怎麼寫存儲過程

1、首先打開需要新建存儲過程的資料庫,點開後找到存儲過程。
2、其次右鍵點擊存儲過程,點擊新建,存儲過程。
3、最後輸入不同表的不同指標即可。

Ⅳ 資料庫怎麼編寫存儲過程

SQL Server的語法:

create procere proc_name

(@para1 int)

as

sql-statement;

Mysql的語法:

create procere proc_name

(para1 int)

sql-statement;

上面的para1是參數,如果不需要可以省略括弧里的內容

sql-statement是你存儲過程要執行的語句,

如果還有什麼疑問可以說出來

Ⅵ c#的存儲過程怎麼寫

首先,需要在資料庫端寫好存儲過程
其次,使用C#編寫通用訪問類,代碼如下:
//procereName,存儲過程名稱;para,參數數組
public int UpdateByProcere(string procereName,sqlparameters[] para)
{
sqlconnection conn=new sqlconnection(connString);//connString,連接字元串
sqlcommand cmd=new sqlcommand();

try
{
conn.open();

cmd.commandtype=commandtype.storedprocere;

cmd.commandtext=procereName;
cmd.parameters.addrange(param);

return cmd.excutenonquery();

}

catch(exceptio ex)

{

throw new exception (ex.message);

}
}
接著,寫數據訪問類
public int AddStudentByProcere(Student objStu)
{
//定義參數數組,這些是存儲過程的輸入或輸出參數
sqlparameters inputStudentName =new parameters

(
"@StudentName",objStu

);

inputStudentName.direction =direction.input;
try

{
return UpdateByProcere("存儲過程名稱",param);
}

catch

{
throw new exception("執行方法AddStudentByProcere出現錯誤,錯誤信息:"+ex.message);

}

}

Ⅶ 資料庫存儲過程怎麼編寫

第一步:點擊資料庫下的「可編程性」,選擇「存儲過程」,點擊滑鼠右鍵,選擇「新建存儲過程」
第二步:在create PROCEDURE 後 輸入存儲過程的名字,緊跟著的就是定義存儲過程的參數,接下來就可以去編寫自己所需要組裝的存儲過程語句了
第三步: 編譯存儲過程,在工具欄上按下執行按鈕,如果沒有錯誤,就編寫成功了。
第四步:調用:在sqlserver的語句查詢框中,輸入exec 存儲過程名 參數,執行就可以了。

基本語法格式如下:中括弧帶的是可選項
create proc | procere pro_name
[{@參數數據類型} [=默認值] [output],
{@參數數據類型} [=默認值] [output],
....
]
as
begin
SQL_statements
--業務處理
end

Ⅷ 如何編寫存儲過程

設計存儲過程
幾乎任何可寫成批處理的 Transact-SQL 代碼都可用於創建存儲過程。

存儲過程的設計規則
存儲過程的設計規則包括:

CREATE PROCEDURE 定義本身可包括除下列 CREATE 語句以外的任何數量和類型的 SQL 語句,存儲過程中的任意地方都不能使用下列語句: CREATE DEFAULT CREATE TRIGGER
CREATE PROCEDURE CREATE VIEW
CREATE RULE

可在存儲過程中創建其它資料庫對象。可以引用在同一存儲過程中創建的對象,前提是在創建對象後再引用對象。

可以在存儲過程內引用臨時表。

如果在存儲過程內創建本地臨時表,則該臨時表僅為該存儲過程而存在;退出該存儲過程後,臨時表即會消失。

如果執行調用其它存儲過程的存儲過程,那麼被調用存儲過程可以訪問由第一個存儲過程創建的、包括臨時表在內的所有對象。

如果執行在遠程 Microsoft® SQL Server™ 2000 實例上進行更改的遠程存儲過程,則不能回滾這些更改。遠程存儲過程不參與事務處理。

存儲過程中參數的最大數目為 2100。

存儲過程中局部變數的最大數目僅受可用內存的限制。

根據可用內存的不同,存儲過程的最大大小可達 128 MB。
有關創建存儲過程的規則的更多信息,請參見 CREATE PROCEDURE。

限定存儲過程內的名稱
在存儲過程內部,如果用於諸如 SELECT 或 INSERT 這樣的語句的對象名沒有限定用戶,那麼用戶將默認為該存儲過程的所有者。在存儲過程內部,如果創建存儲過程的用戶沒有限定 SELECT、INSERT、UPDATE 或 DELETE 語句中引用的表名,那麼通過該存儲過程對這些表進行的訪問將默認地受到該過程的創建者許可權的限制。

如果有其他用戶要使用存儲過程,則用於語句 ALTER TABLE、CREATE TABLE、DROP TABLE、TRUNCATE TABLE、CREATE INDEX、DROP INDEX、UPDATE STATISTICS 和 DBCC 的對象名必須用該對象所有者的名稱限定。例如,Mary 擁有表 marytab,如果她希望其他用戶能夠執行使用該表的存儲過程,必須在該表用於上述某一條語句時對其表名進行限定。

此規則是必需的,因為運行存儲過程時將解析對象的名稱。如果未限定 marytab,而 John 試圖執行該過程,SQL Server 將查找 John 所擁有的名為 marytab 的表。

加密過程定義
如果要創建存儲過程,並且希望確保其他用戶無法查看該過程的定義,那麼可以使用 WITH ENCRYPTION 子句。這樣,過程定義將以不可讀的形式存儲。

存儲過程一旦加密其定義即無法解密,任何人(包括存儲過程的所有者或系統管理員)都將無法查看存儲過程定義。

SET 語句選項
當 ODBC 應用程序與 SQL Server 連接時,伺服器將自動設置會話的下列選項:

SET QUOTED_IDENTIFIER ON

SET TEXTSIZE 2147483647

SET ANSI_DEFAULTS ON

SET CURSOR_CLOSE_ON_COMMIT OFF

SET IMPLICIT_TRANSACTIONS OFF
這些設置將提高 ODBC 應用程序的可移植性。由於基於 DB-Library 的應用程序通常不設置這些選項,所以應在上述所列 SET 選項打開和關閉的情況下都對存儲過程進行測試。這樣可確保存儲過程始終能正確工作,而不管特定的連接在喚醒調用該存儲過程時可能設置的選項。需要特別設置其中一個選項的存儲過程,應在開始該存儲過程時發出一條 SET 語句。此 SET 語句將只對該存儲過程的執行保持有效,當該存儲過程結束時,將恢復原設置。

示例
A. 創建使用參數的存儲過程
下例創建一個在 pubs 資料庫中很有用的存儲過程。給出一個作者的姓和名,該存儲過程將顯示該作者的每本書的標題和出版商。

CREATE PROC au_info @lastname varchar(40), @firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id
JOIN titles ON titleauthor.title_id = titles.title_id
JOIN publishers ON titles.pub_id = publishers.pub_id
WHERE au_fname = @firstname
AND au_lname = @lastname
GO

將出現一條說明該命令未返回任何數據也未返回任何行的消息,這表示已創建該存儲過程。

現在執行 au_info 存儲過程:

EXECUTE au_info Ringer, Anne
GO

下面是結果集:

au_lname au_fname title pub_name
--------- --------- --------------------- ----------------
Ringer Anne The Gourmet Microwave Binnet & Hardley
Ringer Anne Is Anger the Enemy? New Moon Books

(2 row(s) affected)

B. 創建使用參數默認值的存儲過程
下例創建一個存儲過程 pub_info2,該存儲過程顯示作為參數給出的出版商所出版的某本書的作者姓名。如果未提供出版商的名稱,該存儲過程將顯示由 Algodata Infosystems 出版的書籍的作者。

CREATE PROC pub_info2 @pubname varchar(40) = 'Algodata Infosystems'
AS
SELECT au_lname, au_fname, pub_name
FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id
JOIN titles t ON ta.title_id = t.title_id
JOIN publishers p ON t.pub_id = p.pub_id
WHERE @pubname = p.pub_name

執行未指定參數的 pub_info2:

EXECUTE pub_info2
GO

下面是結果集:

au_lname au_fname pub_name
---------------- ---------------- --------------------
Green Marjorie Algodata Infosystems
Bennet Abraham Algodata Infosystems
O'Leary Michael Algodata Infosystems
MacFeather Stearns Algodata Infosystems
Straight Dean Algodata Infosystems
Carson Cheryl Algodata Infosystems
Dull Ann Algodata Infosystems
Hunter Sheryl Algodata Infosystems
Locksley Charlene Algodata Infosystems

(9 row(s) affected)

C. 執行用顯式值替代參數默認值的存儲過程
在下例中,存儲過程 showind2 的 @table 參數默認值是 titles。

CREATE PROC showind2 @table varchar(30) = 'titles'
AS
SELECT TABLE_NAME = sysobjects.name,
INDEX_NAME = sysindexes.name, INDEX_ID = indid
FROM sysindexes INNER JOIN sysobjects ON sysobjects.id = sysindexes.id
WHERE sysobjects.name = @table

列標題(例如,TABLE_NAME)可使結果更具可讀性。下面是該存儲過程顯示的 authors 表的情況:

EXECUTE showind2 authors
GO

TABLE_NAME INDEX_NAME INDEX_ID
---------- ---------- ----------
authors UPKCL_auidind 1
authors aunmind 2

(2 row(s) affected)

如果用戶未提供值,則 SQL Server 將使用默認表 titles:

EXECUTE showind2
GO

下面是結果集:

TABLE_NAME INDEX_NAME INDEX_ID
---------- ---------- ----------
titles UPKCL_titleidind 1
titles titleind 2

(2 row(s) affected)

D. 使用參數默認值 NULL 創建存儲過程
參數默認值可以是 NULL 值。在這種情況下,如果未提供參數,則 SQL Server 將根據存儲過程的其它語句執行存儲過程。不會顯示錯誤信息。

過程定義還可指定當不給出參數時要採取的其它某種措施。例如:

CREATE PROC showind3 @table varchar(30) = NULL
AS IF @table IS NULL
PRINT 'Give a table name'
ELSE
SELECT TABLE_NAME = sysobjects.name,
INDEX_NAME = sysindexes.name, INDEX_ID = indid
FROM sysindexes INNER JOIN sysobjects
ON sysobjects.id = sysindexes.id
WHERE sysobjects.name = @table

E. 使用包含通配符的參數默認值創建存儲過程
如果存儲過程將參數用於 LIKE 關鍵字,那麼默認值可包括通配符(%、_、[] 和 [^])。例如,可將 showind 修改為當不提供參數時顯示有關系統表的信息:

CREATE PROC showind4 @table varchar(30) = 'sys%'
AS SELECT TABLE_NAME = sysobjects.name,
INDEX_NAME = sysindexes.name, INDEX_ID = indid
FROM sysindexes INNER JOIN sysobjects
ON sysobjects.id = sysindexes.id
WHERE sysobjects.name LIKE @table

在存儲過程 au_info 的下列變化形式中,兩個參數都有帶通配符的默認值:

CREATE PROC au_info2 @lastname varchar(30) = 'D%',
@firstname varchar(18) = '%'
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id
JOIN titles ON titleauthor.title_id = titles.title_id
JOIN publishers ON titles.pub_id = publishers.pub_id
WHERE au_fname LIKE @firstname
AND au_lname LIKE @lastname

如果執行 au_info2 時不指定參數,將顯示姓以字母 D 開頭的所有作者:

EXECUTE au_info2
GO

下面是結果集:

au_lname au_fname title pub_name
-------- -------- --------------------- -------------------
Dull Ann Secrets of Silicon Val Algodata Infosystems
del Castillo Innes Silicon Val Gastrono Binnet & Hardley
DeFrance Michel The Gourmet Microwave Binnet & Hardley

(3 row(s) affected)

下例在兩個參數的默認值已定義的情況下,省略了第二個參數,因此可找到姓為 Ringer 的所有作者的書和出版商:

EXECUTE au_info2 Ringer
GO

au_lname au_fname title pub_name
--------- --------- ---------------------- ----------------
Ringer Anne The Gourmet Microwave Binnet & Hardley
Ringer Anne Is Anger the Enemy? New Moon Books
Ringer Albert Is Anger the Enemy? New Moon Books
Ringer Albert Life Without Fear New Moon Books

(4 row(s) affected)

熱點內容
編程中怎麼 發布:2024-05-06 01:43:32 瀏覽:628
如何訪問遠程資料庫 發布:2024-05-06 01:39:20 瀏覽:447
刷演算法的網站 發布:2024-05-06 01:30:39 瀏覽:269
少兒編程徐州 發布:2024-05-06 01:20:42 瀏覽:462
sqlserver連接驅動 發布:2024-05-06 00:33:34 瀏覽:646
存儲開銷 發布:2024-05-06 00:13:38 瀏覽:954
伺服器怎麼盈利 發布:2024-05-05 23:56:16 瀏覽:942
java網站培訓學校 發布:2024-05-05 23:43:11 瀏覽:41
淘寶搜索演算法 發布:2024-05-05 23:37:07 瀏覽:999
sqlwhencasethen 發布:2024-05-05 23:27:51 瀏覽:641