麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網(wǎng)站 > 建站經(jīng)驗 > 正文

SQL 數(shù)據(jù)庫中的存儲過 程的參數(shù)問題

2019-11-02 14:54:52
字體:
供稿:網(wǎng)友

   1、SQL 數(shù)據(jù)庫中的存儲過程的參數(shù)問題

  怎么將SQL數(shù)據(jù)庫中的存儲過程中的參數(shù)既作為輸出變量又作為輸出變量?

  [sql] view plaincopy --drop proc proc_test

  --go

  create proc dbo.proc_test

  @in int,

  @out int out,

  @in_out int output

  as

  select @out = @in + @in_out, --1 + 2 = 3

  @in_out = @out + 1 --3 + 1 = 4

  go

  declare @in_p int

  declare @out_p int

  declare @in_out_p int

  set @in_p = 1;

  set @in_out_p = 2

  exec dbo.proc_test @in_p,

  @out_p out,

  @in_out_p output

  select @in_p, --輸入?yún)?shù)

  @out_p, --輸出參數(shù)

  @in_out_p --輸入,輸出參數(shù)

  /*

  (無列名) (無列名) (無列名)

  1 3 4

  */

  2、在存儲過程中的參數(shù)問題。

  下面是問題:

  [sql] view plaincopy create table #tableTest(id int identity , name varchar(20),age int,)

  go

  insert into #tableTest

  select '小明',23 union all

  select '小紅',28 union all

  select '小軍',27

  go

  select *from #tableTest

  go

  create proc procTest

  @name varchar(20),

  @age int,

  @IDs varchar(30)

  as

  begin

  select *from #tableTest where 1=1

  end

  --當(dāng)我傳入@name參數(shù)等于 小明,23歲,還有ID在(1,3)的時候

  --我怎么可以弄成可選的參數(shù)

  --比如,name不為空時候

  select *from #tableTest where 1=1 and name like '小明'

  --如果name參數(shù)為空的時候,IDs參數(shù)不為空的時候

  select *from #tableTest where 1=1 and id in(1,3)

  --請問一下,就有參數(shù)不為空的時候存儲過程中的SQL追加條件,為空的時候就不追加,這樣帶可選參數(shù)的存儲過程怎么寫,以及怎么調(diào)用,請幫小弟寫一個實例

  這種問題,本質(zhì)上就是根據(jù)傳入的參數(shù)不同,進(jìn)行不同的查詢,也就是where 后面的查詢條件是動態(tài)的。

  一般有2中處理方式,一種就是寫動態(tài)語句,但動態(tài)語句由于是動態(tài)拼接字符串,所以比較難維護(hù),而且如果存儲過程需要執(zhí)行多次,那么每次都需要重新編譯,但每次生成的執(zhí)行計劃,應(yīng)該是比較優(yōu)化的。但如果拼接字符串部分,只是少量的話,還是可以用動態(tài)語句的,下面我的解法就是用動態(tài)語句來實現(xiàn)的,結(jié)構(gòu)清晰,易于維護(hù)。

  另一種,就是通過在where語句后面寫case when來進(jìn)行判斷,這種方法的好處是不用動態(tài)拼接語句,但不易于理解,也不易于修改,因為別人不一定能理解你這么寫的意思。另一個問題就是性能的問題,因為在原來的公司就用過這種方法,一段時間后,查詢非常慢,本來幾秒就能出結(jié)果,后來幾分鐘都出不了結(jié)果。說實在的,這種方法要求較高的技巧性,也容易出錯,不建議使用。

  下面是我的解法,用了動態(tài)語句來實現(xiàn),但考慮了維護(hù)、測試方面的要求:

  [sql] view plaincopy --drop table #tableTest

  create table #tableTest(id int identity , name varchar(20),age int,)

  go

  insert into #tableTest

  select '小明',23 union all

  select '小紅',28 union all

  select '小軍',27

  go

  select *from #tableTest

  go

  create proc procTest

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费视频a| 日本在线不卡一区二区 | 一级黄色淫片 | 亚洲精品动漫在线观看 | 久久久tv| h视频免费看 | 亚洲成人福利在线观看 | 一级色毛片 | 免费毛片免费看 | 自拍偷拍999 | 欧美日本中文字幕 | 人成免费a级毛片 | 国产精品99久久久久久大便 | 久久精品99北条麻妃 | 欧产日产国产精品v | 欧美国产精品一区二区 | 欧美成人综合视频 | 欧美中文字幕一区二区 | 91精品片 | 国内性爱视频 | 日本aⅴ在线 | 精品在线一区二区三区 | 精品在线一区二区三区 | 国色天香综合网 | 色视频欧美 | 精品少妇v888av| 激情综合在线 | 伊人亚洲精品 | 久草导航 | 国产精品久久久久久影视 | 高清视频一区二区 | 中文字幕在线看第二 | 毛片免费观看视频 | 精品一区二区三区毛片 | 护士xxxx | 91精品国产乱码久久久久久久久 | 精品一区二区三区在线视频 | 天天夜碰日日摸日日澡性色av | 国产黄色录像片 | 国产成人羞羞视频在线 | 狠狠干五月 |