请教一个存储过程的写法,sqlserver2000 |
答題得分者是:timhuang
|
jtp
初階會員 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
我写了一个过程如下
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 發送簡訊給我 |
若你是想要作一種類似選擇性參數的做法, 可以這樣做:
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 發送簡訊給我 |
我用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 發送簡訊給我 |
可以的, 我寫個範例給你, 你是要在 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 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
好的, @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') 這樣的條件, 明白嗎? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |