国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

SQL 數據庫中的存儲過 程的參數問題

2019-11-02 14:54:52
字體:
來源:轉載
供稿:網友

   1、SQL 數據庫中的存儲過程的參數問題

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

  [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, --輸入參數

  @out_p, --輸出參數

  @in_out_p --輸入,輸出參數

  /*

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

  1 3 4

  */

  2、在存儲過程中的參數問題。

  下面是問題:

  [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

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

  --我怎么可以弄成可選的參數

  --比如,name不為空時候

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

  --如果name參數為空的時候,IDs參數不為空的時候

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

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

  這種問題,本質上就是根據傳入的參數不同,進行不同的查詢,也就是where 后面的查詢條件是動態的。

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

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

  下面是我的解法,用了動態語句來實現,但考慮了維護、測試方面的要求:

  [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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潜山县| 郑州市| 固安县| 行唐县| 台东市| 绩溪县| 保德县| 南丰县| 蒙城县| 临泽县| 伊宁县| 牟定县| 格尔木市| 桃园市| 古交市| 论坛| 南投市| 九台市| 密云县| 宣威市| 长宁县| 麻江县| 台山市| 西华县| 沽源县| 博兴县| 且末县| 凤台县| 新乡县| 文山县| 华宁县| 济源市| 福鼎市| 舞钢市| 齐河县| 苗栗县| 富川| 亳州市| 仪征市| 广平县| 瑞安市|