全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1161
推到 Plurk!
推到 Facebook!

请教一个存储过程的写法,sqlserver2000

答題得分者是:timhuang
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-25 10:40:16 IP:218.18.xxx.xxx 未訂閱
我写了一个过程如下 CREATE PROCEDURE ado_collect_faliao @acceptdept varchar(50), @ao varchar(50), @partno varchar(50), @inventoryitem char(10) , @faliaoqty int AS update collect set faliaoqty=(@faliaoqty faliaoqty) where (acceptdept=@acceptdept) and (ao =@ao) and (partno=@partno) and (inventoryitem=@inventoryitem) select * from collect where (acceptdept=@acceptdept) and (ao =@ao) and (partno=@partno) and (inventoryitem=@inventoryitem) 我想达到的目的是: 通过acceptdept 和 ao 或 partno 的任意组合做为更新记录的条件,我上面所写的只是其中的一种,请问如何才能任意组合?
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-25 10:58:46 IP:203.95.xxx.xxx 未訂閱
若你是想要作一種類似選擇性參數的做法, 可以這樣做:    
CREATE PROCEDURE [sp_test] 
@my1 int = -1,
@my2 int = -1
AS    select * from aaa where (my1 = @my1 or @my1 = -1) and (my2 = @my2 or @my2 = -1)
GO    
其中 @my1, @my2 的 default 都設為 -1 (必須在該 table 的該兩欄位沒有 -1 的值, 否則應另選 default), 若該參數沒有給定的話, 就會忽略該條件, 因為有個 (my1 = @my1 or @my1 = -1) 的條件, 使得 @my1 不給值時就會將此條件 always true (也就是當做無此條件).
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-25 12:06:08 IP:218.18.xxx.xxx 未訂閱
我用sql写了段代码如下: Sql.Add('where ((Aono Like ''%' Edit5.Text '%'') or (' IntToStr(Length(Edit5.Text)) '= 0)) and ((movment Like ''%' cb_mov.Text '%'') or (' IntToStr(Length(cb_mov.Text)) '= 0)) and ((sono Like ''%' Edit7.Text '%'') or (' IntToStr(Length(Edit7.Text)) '= 0)) '); 我现在就想在存储过程中能达到这样的效果,请问可以吗?
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-25 12:36:52 IP:203.95.xxx.xxx 未訂閱
可以的, 我寫個範例給你, 你是要在 stored procedure 中組合 sql command 是吧? 要配合 execute 執行 sql command 即可! 這樣作就行了:    
CREATE PROCEDURE [sp_test2] 
@my1 varchar(200)
AS
declare @sqlcommand varchar(2000)
select @sqlcommand = 'select * from aaa where ' @my1
execute (@sqlcommand)    GO    
這樣你就可以下: sp_test2 'my2=2' 這種方式來進行啦!
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-25 13:56:04 IP:218.18.xxx.xxx 未訂閱
timhuang 您好! 我对你下面这句话不是很理解,因为我须要update才能更新资料库的,请问能仔细说说吗? select @sqlcommand = 'select * from aaa where ' @my1
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-25 16:40:56 IP:203.95.xxx.xxx 未訂閱
好的, @sqlcommand 宣告為 varchar(2000), 用來存放將要執行的 sql command, 目的為接收字串型態的資料, 所以 select @sqlcommand = xxxx 的目的只是在於設定將要執行的 sql command, 其中的 xxxx 就是 sql command. 接下來說明要如何改寫:
select @sqlcommand = 'update collect set faliaoqty= @value1   faliaoqty where ' @where_condition
execute (@sqlcommand)
這個 procedure 就是更新 faliaoqty 的值為 @value1 faliaoqty, 條件為外部傳來的 @where_condition, 是字串的條件, 如 (acceptdept = 'test') 這樣的條件, 明白嗎?
系統時間:2024-07-01 20:49:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!