存儲過程相當於Java,C#中的函數,就按照函數的用法理解就可以了。
❷ sql存儲過程
可以修改為:在if exists判斷之後
select RaceNumbers into #rid from Matchinformation
where RaceNumbers in (select RaceNumbers from inserted)
group by RaceNumbers having count(RaceNumbers)=2
update Team set Integration=(case when a.PGoals-b.PGoals >0 then 3
when a.PGoals-b.PGoals=0 then 1 else 0 end)
from Matchinformation a left join MatchInformation b on a.RaceNumbers =b.RaceNumbers
and a.TeamId<>b.TeamId
where Team.TeamId=a.TeamId and a.RaceNumbers in(select * from #rid)
❸ sql存儲過程幾個簡單
例1:
create proc proc_stu
@sname varchar(20),
@pwd varchar(20)
as select * from ren where sname=@sname and pwd=@pwd
go
查看結果:proc_stu 'admin','admin' 例2:
下面的存儲過程實現用戶驗證的功能,如果不成功,返回0,成功則返回1.
CREATE PROCEDURE VALIDATE @USERNAME CHAR(20),@PASSWORD CHAR(20),@LEGAL BIT OUTPUT
AS
IF EXISTS(SELECT * FROM REN WHERE SNAME = @USERNAME AND PWD = @PASSWORD)
SELECT @LEGAL = 1 ELSE
SELECT @LEGAL = 0 在程序中調用該存儲過程,並根據@LEGAL參數的值判斷用戶是否合法。
❹ sql存儲過程寫法
select * from table where id = @id or @id is null
❺ sql存儲過程是什麼
所有設計優良的 Microsoft® SQL Server™ 2000 應用程序都應當使用存儲過程。不論是否將應用程序的業務邏輯寫入存儲過程都應如此。甚至連沒有業務邏輯組件的標准 Transact-SQL 語句,在用參數打包成存儲過程後也能獲得性能收益。編譯進存儲過程的 Transact-SQL 語句在執行時可省去大量的處理。
存儲過程的另一個優點是客戶端執行請求使用網路的效率比將等效的 Transact-SQL 語句發送到伺服器高。例如,假設應用程序需要將一個大的二進制值插入 image 數據列。為使用 INSERT 語句發送數據,該應用程序必須將該二進制值轉換為字元串(其大小翻倍),然後發送到伺服器。伺服器再將該值轉換回二進制格式以存儲在 image 列中。
相反,應用程序可以創建下列格式的存儲過程:
CREATE PROCEDURE P(@p1 image) AS INSERT T VALUES (@p1)
當客戶端應用程序請求執行過程 P 時,image 參數值將一直以二進制格式發送到伺服器,從而節省處理時間並減少網路流量。
如果 SQL Server 存儲過程中包含業務服務邏輯,因為業務服務邏輯將處理移動到數據,而不是將數據移動到處理,因而存儲過程能提供更大的性能收益。
存儲過程的優點
(1)存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的 運算。
(2) 可保證數據的安全性和完整性。
● 通過存儲過程可以使沒有許可權的用戶在控制之下間接地存取資料庫,從而保證數據的安全。
● 通過存儲過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。
(3) 再運行存儲過程前,資料庫已對其進行了語法和句法分析,並給出了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。 由於執行SQL語句的大部分工作已經完成,所以存儲過程能以極快的速度執行。
(4)可以降低網路的通信量。
(5) 使體現企業規則的運算程序放入資料庫伺服器中,以便:
● 集中控制。
● 當企業規則發生變化時在伺服器中改變存儲過程即可,無須修改任何應用程序。企業規則的特點是要經常變化,如果把體現企業規則的運算程序放入應用程序中,則當企業規則發生變化時,就需要修改應用程序工作量非常之大(修改、發行和安裝應用程序)。如果把體現企業規則的 運算放入存儲過程中,則當企業規則發生變化時,只要修改存儲過程就可以了,應用程序無須任何變化。
1.使用企業管理器創建用戶存儲過程
操作步驟如下:
(1)啟動SQL Server企業管理器。
(2)在「控制台根目錄」窗口,展開「SQL Server組」,首先,選擇「資料庫」,然後,選擇「存儲過程」,單擊滑鼠右鍵,打開快捷菜單。
(3)在打開快捷菜單中,選擇「新建存儲過程」菜單命令,進入「存儲過程屬性」窗口。
(4)在「存儲過程屬性」窗口,在文本框中輸入存儲過程代碼,單擊「確定」,結束存儲過程的創建。
2.使用T-SQL語句創建用戶存儲過程
SQL命令格式:
CREATE PROC [ EDURE ] <Procere_name> [ ; Number ]
[ { @parameter Data_type }
[ VARYING ] [ = Default ] [ OUTPUT ]] [ ,...n ]
[ WITH{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION }]
[ FOR REPLICATION ]
AS sql_statements
功能:創建一個用戶存儲過程,並保存在資料庫中。
❻ SQL 存儲過程
仔細思考一下我的解決辦法是否妥當:
因為過程開頭部分已經定義了4個變數,並且都賦初值為'0',
那麼,我們做兩處變動:
1、在你的select語句執行前,我們寫上4個判斷,判斷這4個變數是否被傳入了值,未傳入時怎麼樣處理。
2、修改select語句的where子句(語句中有三個「=」改成like)。
過多的描述也許難以看懂,我直接寫出來,新增或修改的部分,我在後面用了注釋「//--★」(我的寫法是基於Sybase的,你可以看懂的。當然你也可以先看一下後面的【總結】):
if exists(………………………………)
drop ……………………
go
create Proc Proc_ManualSign
@BranchId varchar(10) = '0',
……………………
……………………
@UserName varchar(50) = '0'
as
begin //--★sybase寫法,用於過程開始,參考你的資料庫,看是否需要加
if @BranchId = '0' //--★如果@BranchId依然為初始值(未傳入參數)
select @BranchId = '%' //--★那麼將@BranchId賦值為'%'
if @DepartId = '0' //--★如果@DepartId依然為初始值(未傳入參數)
select @DepartId = '%' //--★那麼將@DepartId賦值為'%'
if @UserId = '0' //--★如果@UserId依然為初始值(未傳入參數)
select @UserId = '%' //--★那麼將@UserId賦值為'%'
if @UserName = '0' //--★如果@UserName依然為初始值(未傳入參數)
select @UserName = '%' //--★那麼將@UserName賦值為'%'
select …………
……………………
and b.BranchId like @BranchId --機構 //--★你原來的「=」改成了「like」
and d.DepartId like @DepartId --部門 //--★你原來的「=」改成了「like」
and m.UserId like @UserId --用戶Id //--★你原來的「=」改成了「like」
and u.UserName like '%'+@UserName+'%' --用戶名
end //--★sybase寫法,用於標注過程結束,參考你的資料庫,看是否需要加
go
======================================================================
【★★--總結--★★】我的辦法:
4個變數初值為'0',excute執行該過程時,if語句就要依次判斷各變數的當前值,判斷的結果無非兩種:①.未傳入值(還是'0'),②.傳入了值(不是'0')
①.未傳入值
if語句判斷出某變數未傳入值,則將該變數置為'%',那麼select語句的where條件中就是該欄位 like '%',也就是該欄位的檢索條件為任意的。
②.傳入了值
傳入了值,則if語句的判斷結果為假(False),那麼直接跳出判斷去執行select語句,雖然where子句的條件中用的是 like 介詞,但沒有通配符'%'的話,like 的作用也就是'=',即:【like '銷售部'】的作用也就是 【='銷售部'】,所以也滿足了輸入參數的精確查詢要求。
執行時:
假如什麼參數也不傳入,即:查詢全部的信息
excute Proc_ManualSign '0', '0', '0', '0'
假如僅部門和用戶ID傳入參數,則
excute Proc_ManualSign '0', '開發部', '319', '0'
❼ SQL存儲過程
樓上說的都不對,這明明是SqlServer的存儲過程,你們卻寫成了Oracle的存儲過程,兩個語法還是有所區別的,應該這樣:
create procere insert_stu
(
@xh varchar(7),
@xm varchar(10),
@xb varchar(2),
@nl tinyint,
@szx varchar(20)
)
as
begin
insert into student values (@xh,@xm,@xb,@nl,@szx);
end
以上,希望對你有所幫助!
❽ SQL存儲過程怎麼寫
--表a和表b兩個表之間要存在一種聯系(比如你的會員ID,在這兩個表裡都有吧?)
--所以你可以這樣寫
--select case a.STS when Y then b.臨時地址 else a.聯系地址 end as Address
--from a join b on a.會員ID=b.會員ID
--這樣就可以得到相應的地址了
❾ SQL存儲過程實例
樓下的太麻煩了吧。emp員工表,輸入任何部門號,返回部門的總工資,把總工資和部門好,分別放進emp2表裡。
編寫存儲過程查詢某部門員工的工資總和
create or replace procere my_text(v_deptno number)
is
cursor c is select* from emp;
v1 number:=0;
begin
for a in c loop
if(a.deptno=v_deptno) then
v1:=v1+a.sal;
end if;
end loop;
insert into emp2 values(v1,v_deptno);
end;
是不是很吊啊?樓主?
❿ Sql 存儲過程
sql語句執行的時候要先編譯,然後執行。存儲過程(Stored
Procere)是一組為了完成特定功能的SQL語句集,經編譯後存儲在資料庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程序都應該用到存儲過程。