怎樣創建存儲過程視頻
創建存儲過程
mysql>
delimiter
$
--
delimiter
$是設置
$為命令終止符號,代替默認的分號,因為分號有其他用處.
mysql>
create
procere
sp_test(IN
pi_id
int,
OUT
po_name
varchar(10))
->
begin
->
select
*
from
test.tb_test;
->
select
tb_test.name
into
po_name
from
test.tb_test
where
tb_test.id
=
pi_id;
->
end
->
$
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
delimiter
;
--
恢復分號作為分隔終止符號
5.調用存儲過程
mysql>
set
@po_name='';
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
call
sp_test(1,@po_name);
㈡ 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
(2)怎樣創建存儲過程視頻擴展閱讀:
創建存儲過程的注意事項:
1、保持事務簡短,事務越短,越不可能造成阻塞。
2、在事務中盡量避免使用循環while和游標,以及避免採用訪問大量行的語句。
3、在啟動事務前完成所有的計算和查詢等操作,避免同一事務中交錯讀取和更新。可以使用表變數預先存儲數據。即存儲過程中查詢與更新使用兩個事務實現。
4、超時會讓事務不執行回滾,超時後如果客戶端關閉連接sqlserver自動回滾事務。如果不關閉,將造成數據丟失,而其他事務將在這個未關閉的連接上執行,造成資源鎖定,甚至伺服器停止響應。
㈢ 怎樣建一個存儲過程
-------------------建表------------------
CREATE TABLE [tab_cJ] (
[id] [int] IDENTITY (1, 1) NOT NULL PRIMARY KEY,
[name] [varchar] (50) ,
[age] [int] NULL ,
[info] [varchar] (200)
)
------------------建存儲過程-------------------------
CREATE PROCEDURE QueryInfoByName
@name varchar(50),
@age int
AS
select info from tab_cj where [name]=@name and age=@age
GO
--------------------調用-------------------------------
protected void GetInfoByName(string txt_name, int txt_age)
{
SqlConnection conn = new SqlConnection("server=localhost;database=dbDemo;uid=sa");
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcere; //指定執行存儲過程操作
cmd.CommandText = "QueryInfoByName"; //存儲過程名稱
//對應存儲過程QueryInfoByName的第一個參數@name
SqlParameter parName = new SqlParameter("@name", SqlDbType.VarChar, 50);
//指定參數@name要轉入的值
parName.Value = txt_name;
//對應存儲過程QueryInfoByName的第二個參數@age
SqlParameter parAge = new SqlParameter("@age", SqlDbType.Int);
//指定參數@age要轉入的值
parAge.Value = txt_age;
//這一步非常重要,一定將設置好的兩個參數類型添加到Command對象的參數集合里
cmd.Parameters.Add(parName);
cmd.Parameters.Add(parAge);
//方式一,查詢回來的結果需要顯示在DataGrid之類的控制項上
DataSet ds = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(ds);
//方式二,按單個值讀取
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Response.Write(reader.GetString(0));
}
}
conn.Close();
}
㈣ 怎麼創建存儲過程
有存儲過程的向導
打開sql的企業管理器,定位到你要建立存儲過程的資料庫.在工具菜單里單擊」向導」,打開」選擇向導」對話框.在注冊服務向導中單擊」資料庫」
在打開的列表中有」創建存儲過程的向導」
你只要按提示操作就可以了
㈤ 如何創建SQL存儲過程
步驟如下:
在對象資源管理器中,連接到某個資料庫引擎實例,再展開該實例。
展開「資料庫」、sql server存儲過程所屬的資料庫以及「可編程性」。
右鍵單擊「存儲過程」,再單擊「新建存儲過程」。
在「查詢」菜單上,單擊「指定模板參數的值」。
在「指定模板參數的值」對話框中,「值」列包含參數的建議值。接受這些值或將其替換為新值,再單擊「確定」。
在查詢編輯器中,使用過程語句替換 SELECT 語句。
若要測試語法,請在「查詢」菜單上,單擊「分析」。
若要創建sql server存儲過程,請在「查詢」菜單上,單擊「執行」。
若要保存腳本,請在「文件」菜單上,單擊「保存」。接受該文件名或將其替換為新的名稱,再單擊「保存」。
㈥ 怎麼創建存儲過程在哪裡創建
是什麼資料庫啊,我給你個SQL SERVER的吧
/*---------------------- 練習二 -------------------------*/
use bbsDB
go
if exists(select * from sysobjects where name='proc_find1')
drop procere proc_find1
go
create procere proc_find1
@userName varchar(10)
as
set nocount on
declare @userID varchar(10)
select @userID=UID from bbsUsers where Uname=@userName
if exists(select * from bbsTopic where TuID=@userID)
begin
print @userName+'發表的主帖如下:'
select 發帖時間=convert(varchar(10),Ttime,111),點擊率=TclickCount,
主題=Ttopic,內容=Tcontents from bbsTopic where TuID=@userID
end
else
print @userName+'沒有發表過主帖。'
if exists(select * from bbsReply where RuID=@userID)
begin
print @userName+'發表的回帖如下:'
select 回帖時間=convert(varchar(10),Rtime,111),點擊率=RclickCount,
回帖內容=Rcontents from bbsReply where RuID=@userID
end
else
print @userName+'沒有發表過回帖。'
go
exec proc_find1 '可卡因'
/*---------------------- 練習三 -------------------------*/
if exists(select * from sysobjects where name='proc_find2')
drop procere proc_find2
go
create procere proc_find2
@userName varchar(10),
@sumTopic int output,
@sumReply int output
as
set nocount on
declare @userID varchar(10)
select @userID=UID from bbsUsers where Uname=@userName
if exists(select * from bbsTopic where TuID=@userID)
begin
select @sumTopic=count(*) from bbsTopic where TuID=@userID
print @userName+'發表的主帖如下:'
select 發帖時間=convert(varchar(10),Ttime,111),點擊率=TclickCount,
主題=Ttopic,內容=Tcontents from bbsTopic where TuID=@userID
end
else
begin
set @sumTopic=0
print @userName+'沒有發表過主帖。'
end
if exists(select * from bbsReply where RuID=@userID)
begin
select @sumReply=count(*) from bbsReply where RuID=@userID
print @userName+'發表的回帖如下:'
select 回帖時間=convert(varchar(10),Rtime,111),點擊率=RclickCount,
回帖內容=Rcontents from bbsReply where RuID=@userID
end
else
begin
set @sumReply=0
print @userName+'沒有發表過回帖。'
end
go
declare @sum1 int, @sum2 int
exec proc_find2 '可卡因',@sum1 output,@sum2 output
if @sum1>@sum2
print '小弟發帖比回帖多,看來比較喜歡標新立異!'
else
print '小弟回帖比發帖多,看來比較關心民眾疾苦!'
print '總帖數:'+convert(varchar(5), @sum1+@sum2)
go
/*---------------------- 練習題一 -------------------------*/
if exists(select * from sysobjects where name='proc_find3')
drop procere proc_find3
go
create procere proc_find3
@userName varchar(10),
@sumTopic int output,
@sumReply int output,
@secName varchar(15)=''
as
set nocount on
declare @userID varchar(10)
select @userID=UID from bbsUsers where Uname=@userName
--版塊名稱為空
if (@secName='')
begin
if exists(select * from bbsTopic where TuID=@userID)
begin
select @sumTopic=count(*) from bbsTopic where TuID=@userID
print @userName+'發表的主帖數為:'+convert(varchar(5),@sumTopic)+' , 內容如下:'
select 發帖時間=convert(varchar(10),Ttime,111),點擊率=TclickCount,
主題=Ttopic,內容=Tcontents from bbsTopic where TuID=@userID
end
else
begin
set @sumTopic=0
print @userName+'沒有發表過主帖。'
end
if exists(select * from bbsReply where RuID=@userID)
begin
select @sumReply=count(*) from bbsReply where RuID=@userID
print @userName+'發表的回帖數量為:'+convert(varchar(5),@sumReply)+' , 內容如下:'
select 回帖時間=convert(varchar(10),Rtime,111),點擊率=RclickCount,
回帖內容=Rcontents from bbsReply where RuID=@userID
end
else
begin
set @sumReply=0
print @userName+'沒有發表過回帖。'
end
end
--版塊名稱不為空
else
begin
if exists(select * from bbsTopic where TuID=@userID)
begin
select @sumTopic=count(*) from bbsTopic where TuID=@userID
and TsID=(select SID from bbsSection where Sname like @secName)
print @userName+'曾在 '+@secName+' 版塊發表的主帖數量為:'+convert(varchar(5),@sumTopic)+' , 內容如下:'
select 發帖時間=convert(varchar(10),Ttime,111),點擊率=TclickCount,
版塊名稱=@secName,主題=Ttopic,內容=Tcontents from bbsTopic where TuID=@userID
end
else
begin
set @sumTopic=0
print @userName+'沒有發表過主帖。'
end
if exists(select * from bbsReply where RuID=@userID)
begin
select @sumReply=count(*) from bbsReply where RuID=@userID
and RsID=(select SID from bbsSection where Sname like @secName)
print @userName+'曾在 '+@secName+' 版塊發表的回帖數量為:'+convert(varchar(5),@sumReply)+' , 內容如下:'
select 回帖時間=convert(varchar(10),Rtime,111),點擊率=RclickCount,
版塊名稱=@secName,回帖內容=Rcontents from bbsReply where RuID=@userID
end
else
begin
set @sumReply=0
print @userName+'沒有發表過回帖。'
end
end
go
declare @sum1 int, @sum2 int
exec proc_find3 '可卡因',@sum1 output,@sum2 output,'.NET技術'
if @sum1>@sum2
print '小弟發帖比回帖多,看來比較喜歡標新立異!'
else
print '小弟回帖比發帖多,看來比較關心民眾疾苦!'
print '總帖數:'+convert(varchar(5), @sum1+@sum2)
go
/*---------------------- 練習題二 -------------------------*/
/*---------------------- 作業題 -------------------------*/
use bbsDB
go
if exists(select * from sysobjects where name='proc_delive')
drop procere proc_delive
go
create procere proc_delive
@userName varchar(10),
@sectionName varchar(20),
@topic varchar(20),
@contents varchar(20),
@face int
as
set nocount on
declare @userID varchar(10),@sectionID varchar(10)
select @userID=UID from bbsUsers where Uname=@userName
select @sectionID=SID from bbsSection where Sname like @sectionName
print @userName+'發帖前的狀態如下:'
select * from bbsUsers where UID=@userID
insert into bbsTopic(TsID,TuID,Ttopic,Tcontents,Tface)
values(@sectionID,@userID,@topic,@contents,@face)
print @userName+'發帖如下:'
select * from bbsTopic where TID=@@identity
update bbsSection set StopicCount=StopicCount+1 where SID=@sectionID
if not exists(select * from bbsTopic where Ttopic like @topic and TuID=@userID)
update bbsUsers set Upoint=Upoint+100 where UID=@userID
else
update bbsUsers set Upoint=Upoint+50 where UID=@userID
update bbsUsers set Uclass=case
when Upoint <500 then 1
when Upoint between 500 and 1000 then 2
when Upoint between 1001 and 2000 then 3
when Upoint between 2001 and 4000 then 4
when Upoint between 4001 and 5000 then 5
else 6
end
where UID=@userID
print @userName+'發帖後的狀態如下:'
select * from bbsUsers where UID=@userID
go
exec proc_delive '心酸果凍','.NET技術','.NET問題','請問如何使用……',3
go
㈦ 如何創建存儲過程
語法
CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
} ]
sql_statement [ ...n ]
}
}
參數
trigger_name
是觸發器的名稱。觸發器名稱必須符合標識符規則,並且在資料庫中必須唯一。可以選擇是否指定觸發器所有者名稱。
Table | view
是在其上執行觸發器的表或視圖,有時稱為觸發器表或觸發器視圖。可以選擇是否指定表或視圖的所有者名稱。
WITH ENCRYPTION
加密 syscomments 表中包含 CREATE TRIGGER 語句文本的條目。使用 WITH ENCRYPTION 可防止將觸發器作為 SQL Server 復制的一部分發布。
AFTER
指定觸發器只有在觸發 SQL 語句中指定的所有操作都已成功執行後才激發。所有的引用級聯操作和約束檢查也必須成功完成後,才能執行此觸發器。
如果僅指定 FOR 關鍵字,則 AFTER 是默認設置。
不能在視圖上定義 AFTER 觸發器。
INSTEAD OF
指定執行觸發器而不是執行觸發 SQL 語句,從而替代觸發語句的操作。
在表或視圖上,每個 INSERT、UPDATE 或 DELETE 語句最多可以定義一個 INSTEAD OF 觸發器。然而,可以在每個具有 INSTEAD OF 觸發器的視圖上定義視圖。
INSTEAD OF 觸發器不能在 WITH CHECK OPTION 的可更新視圖上定義。如果向指定了 WITH CHECK OPTION 選項的可更新視圖添加 INSTEAD OF 觸發器,SQL Server 將產生一個錯誤。用戶必須用 ALTER VIEW 刪除該選項後才能定義 INSTEAD OF 觸發器。
{ [DELETE] [,] [INSERT] [,] [UPDATE] }
是指定在表或視圖上執行哪些數據修改語句時將激活觸發器的關鍵字。必須至少指定一個選項。在觸發器定義中允許使用以任意順序組合的這些關鍵字。如果指定的選項多於一個,需用逗號分隔這些選項。
對於 INSTEAD OF 觸發器,不允許在具有 ON DELETE 級聯操作引用關系的表上使用 DELETE 選項。同樣,也不允許在具有 ON UPDATE 級聯操作引用關系的表上使用 UPDATE 選項。
WITH APPEND
指定應該添加現有類型的其它觸發器。只有當兼容級別是 65 或更低時,才需要使用該可選子句。如果兼容級別是 70 或更高,則不必使用 WITH APPEND 子句添加現有類型的其它觸發器(這是兼容級別設置為 70 或更高的 CREATE TRIGGER 的默認行為)。有關更多信息,請參見 sp_dbcmptlevel。
WITH APPEND 不能與 INSTEAD OF 觸發器一起使用,或者,如果顯式聲明 AFTER 觸發器,也不能使用該子句。只有當出於向後兼容而指定 FOR 時(沒有 INSTEAD OF 或 AFTER),才能使用 WITH APPEND。以後的版本將不支持 WITH APPEND 和 FOR(將被解釋為 AFTER)。
NOT FOR REPLICATION
表示當復制進程更改觸發器所涉及的表時,不應執行該觸發器。
AS
是觸發器要執行的操作。
sql_statement
是觸發器的條件和操作。觸發器條件指定其它准則,以確定 DELETE、INSERT 或 UPDATE 語句是否導致執行觸發器操作。
當嘗試 DELETE、INSERT 或 UPDATE 操作時,Transact-SQL語句中指定的觸發器操作將生效。
觸發器可以包含任意數量和種類的 Transact-SQL 語句。觸發器旨在根據數據修改語句檢查或更改數據;它不應將數據返回給用戶。觸發器中的 Transact-SQL 語句常常包含控制流語言。CREATE TRIGGER 語句中使用幾個特殊的表:
deleted 和 inserted 是邏輯(概念)表。這些表在結構上類似於定義觸發器的表(也就是在其中嘗試用戶操作的表);這些表用於保存用戶操作可能更改的行的舊值或新值。例如,若要檢索 deleted 表中的所有值,請使用:
SELECT *
FROM deleted
如果兼容級別等於 70,那麼在 DELETE、INSERT 或 UPDATE 觸發器中,SQL Server 將不允許引用 inserted 和 deleted 表中的 text、ntext 或 image 列。不能訪問 inserted 和 deleted 表中的 text、ntext 和 image 值。若要在 INSERT 或 UPDATE 觸發器中檢索新值,請將 inserted 表與原始更新表聯接。當兼容級別是 65 或更低時,對 inserted 或 deleted 表中允許空值的text、ntext 或 image 列,將返回空值;如果這些列不可為空,則返回零長度字元串。
當兼容級別是 80 或更高時,SQL Server 允許在表或視圖上通過 INSTEAD OF 觸發器更新 text、ntext 或 image 列。
n
是表示觸發器中可以包含多條 Transact-SQL 語句的佔位符。對於 IF UPDATE (column) 語句,可以通過重復 UPDATE (column) 子句包含多列。
IF UPDATE (column)
測試在指定的列上進行的 INSERT 或 UPDATE 操作,不能用於 DELETE 操作。可以指定多列。因為在 ON 子句中指定了表名,所以在 IF UPDATE 子句中的列名前不要包含表名。若要測試在多個列上進行的 INSERT 或 UPDATE 操作,請在第一個操作後指定單獨的 UPDATE(column) 子句。在 INSERT 操作中 IF UPDATE 將返回 TRUE 值,因為這些列插入了顯式值或隱性 (NULL) 值。
說明 IF UPDATE (column) 子句的功能等同於 IF、IF...ELSE 或 WHILE 語句,並且可以使用 BEGIN...END 語句塊。有關更多信息,請參見控制流語言。
可以在觸發器主體中的任意位置使用 UPDATE (column)。
column
是要測試 INSERT 或 UPDATE 操作的列名。該列可以是 SQL Server 支持的任何數據類型。但是,計算列不能用於該環境中。有關更多信息,請參見數據類型。
IF (COLUMNS_UPDATED())
測試是否插入或更新了提及的列,僅用於 INSERT 或 UPDATE 觸發器中。COLUMNS_UPDATED 返回 varbinary 位模式,表示插入或更新了表中的哪些列。
COLUMNS_UPDATED 函數以從左到右的順序返回位,最左邊的為最不重要的位。最左邊的位表示表中的第一列;向右的下一位表示第二列,依此類推。如果在表上創建的觸發器包含 8 列以上,則 COLUMNS_UPDATED 返回多個位元組,最左邊的為最不重要的位元組。在 INSERT 操作中 COLUMNS_UPDATED 將對所有列返回 TRUE 值,因為這些列插入了顯式值或隱性 (NULL) 值。
可以在觸發器主體中的任意位置使用 COLUMNS_UPDATED。
bitwise_operator
是用於比較運算的位運算符。
updated_bitmask
是整型位掩碼,表示實際更新或插入的列。例如,表 t1 包含列 C1、C2、C3、C4 和 C5。假定表 t1 上有 UPDATE 觸發器,若要檢查列 C2、C3 和 C4 是否都有更新,指定值 14;若要檢查是否只有列 C2 有更新,指定值 2。
comparison_operator
是比較運算符。使用等號 (=) 檢查 updated_bitmask 中指定的所有列是否都實際進行了更新。使用大於號 (>) 檢查 updated_bitmask 中指定的任一列或某些列是否已更新。
column_bitmask
是要檢查的列的整型位掩碼,用來檢查是否已更新或插入了這些列
㈧ 如何編寫存儲過程
//創建存儲過程
CREATE PROCEDURE userData(
IN id INT
)
BEGIN
SELECT * from userdata WHERE userflag = id;
END;
其中IN是傳進去的變數;
drop procere userData;//銷毀這個存儲過程。
call userData(2) //調用存儲過程。
(8)怎樣創建存儲過程視頻擴展閱讀:
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這兩個語句。
參考資料來源:網路-儲存過程