溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎樣解析不固定參數(shù)的存儲(chǔ)過程

發(fā)布時(shí)間:2021-03-10 10:57:05 來源:億速云 閱讀:157 作者:小新 欄目:數(shù)據(jù)庫(kù)

小編給大家分享一下怎樣解析不固定參數(shù)的存儲(chǔ)過程,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

  如何解析不固定參數(shù)的存儲(chǔ)過程

  假設(shè)現(xiàn)在給你一個(gè)產(chǎn)品信息列表(顯示出各個(gè)商品的基本信息),現(xiàn)在我想要根據(jù)所選擇商品進(jìn)行統(tǒng)計(jì)(任意選擇幾種),例如統(tǒng)計(jì)出價(jià) 格<10,11-20,21-30,31-40,41-50,50以上的商品個(gè)有多少個(gè)(姑且認(rèn)為就統(tǒng)計(jì)這些)。此時(shí)如果使用存儲(chǔ)過程就勢(shì)必需要傳 入所選商品的id作為參數(shù),但是id個(gè)數(shù)是不固定的。此時(shí)估計(jì)會(huì)有人這樣寫:   

SET ANSI_NULLS ON

  GO
  SET QUOTED_IDENTIFIER ON
  GO
  -- =============================================
  -- Description: 統(tǒng)計(jì)商品
  -- =============================================

  ALTER PROCEDURE StatProductInfo
  (
  @ids VARCHAR(8000)

  )
  AS
  BEGIN
  DECLARE @followingTen INT
  DECLARE @elevenToTwenty INT
  DECLARE @twentyOneToThirty INT
  DECLARE @thirtyOneToFourty INT
  DECLARE @fourtyOneToFifty INT
  DECLARE @fiftyOrMore INT
  SELECT @followingTen=COUNT(*)
  FROM dbo.Products
  WHERE ProductID IN(@ids) AND UnitPrice<10 11="" 20="" 21="" 30="" 31="" 40="" 41="" 50="" select="" eleventotwenty="COUNT(*)" from="" dbo.products="" where="" productid="" and="" unitprice="" between="" twentyonetothirty="COUNT(*)" thirtyonetofourty="COUNT(*)" fourtyonetofifty="COUNT(*)" fiftyormore="COUNT(*)">50
  SELECT @followingTen AS '<$10 eleventotwenty="" as="" twentyonetothirty="" thirtyonetofourty="" fourtyonetofifty="" fiftyormore="">$50'
  END
  GO

  其實(shí)如果你測(cè)試一下(例如:EXEC dbo . StatProductInfo '3,4,8,10,22' )是有問題的,sql server認(rèn)為這整個(gè)是一個(gè)參數(shù),轉(zhuǎn)換時(shí)出錯(cuò)。此時(shí)我們想一下如果這些字段在一個(gè)虛表中就容易操作多了,但是一般虛表是有其他表通過查詢得到,現(xiàn)在根本 無法查詢又哪來的虛表呢?聰明的朋友或許已經(jīng)想到可以使用"表值函數(shù)"。對(duì),答案就是使用"表值函數(shù)"。我們知道"表值函數(shù)"可以返回一個(gè)"Table" 類型的變量(相當(dāng)于一張?zhí)摫恚娣庞趦?nèi)存中),我們首先將字符串分割存放到"表值函數(shù)"的一個(gè)字段中,然后我們?cè)購(gòu)?quot;表值函數(shù)"中查詢就可以了(這個(gè)例子 也是"表值函數(shù)"的一個(gè)典型應(yīng)用)。具體sql如下:

  如何解析不固定參數(shù)的存儲(chǔ)過程

  然后我們稍微修改一下存儲(chǔ)過程:

  SET ANSI_NULLS ON
  GO
  SET QUOTED_IDENTIFIER ON
  GO
  -- =============================================
  -- Author: jianxin160
  -- Create date: 2010.11.05
  -- Description: 統(tǒng)計(jì)商品
  -- =============================================
  ALTER PROCEDURE StatProductInfo
  (
  @ids VARCHAR(8000)
  )
  AS
  BEGIN
  DECLARE @followingTen INT
  DECLARE @elevenToTwenty INT
  DECLARE @twentyOneToThirty INT
  DECLARE @thirtyOneToFourty INT
  DECLARE @fourtyOneToFifty INT
  DECLARE @fiftyOrMore INT
  SELECT @followingTen=COUNT(*)
  FROM dbo.Products
  WHERE ProductID IN(SELECT sp FROM dbo.GetSplitFieldsByString(@ids,',')) AND UnitPrice<10 11="" 20="" 21="" 30="" 31="" 40="" 41="" 50="" select="" eleventotwenty="COUNT(*)" from="" dbo.products="" where="" productid="" sp="" and="" unitprice="" between="" twentyonetothirty="COUNT(*)" thirtyonetofourty="COUNT(*)" fourtyonetofifty="COUNT(*)" fiftyormore="COUNT(*)">50
  SELECT @followingTen AS '<$10 eleventotwenty="" as="" twentyonetothirty="" thirtyonetofourty="" fourtyonetofifty="" fiftyormore="">$50'
  END
  GO

  這樣通過執(zhí)行EXEC dbo . StatProductInfo '3,4,8,10,22' 就可以得到想要的結(jié)果了。

以上是“怎樣解析不固定參數(shù)的存儲(chǔ)過程”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI