小編給大家分享一下怎樣解析不固定參數(shù)的存儲過程,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、陵川網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城系統(tǒng)網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為陵川等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
如何解析不固定參數(shù)的存儲過程
假設(shè)現(xiàn)在給你一個產(chǎn)品信息列表(顯示出各個商品的基本信息),現(xiàn)在我想要根據(jù)所選擇商品進行統(tǒng)計(任意選擇幾種),例如統(tǒng)計出價 格<10,11-20,21-30,31-40,41-50,50以上的商品個有多少個(姑且認為就統(tǒng)計這些)。此時如果使用存儲過程就勢必需要傳 入所選商品的id作為參數(shù),但是id個數(shù)是不固定的。此時估計會有人這樣寫:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Description: 統(tǒng)計商品 -- ============================================= 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
其實如果你測試一下(例如:EXEC dbo . StatProductInfo '3,4,8,10,22' )是有問題的,sql server認為這整個是一個參數(shù),轉(zhuǎn)換時出錯。此時我們想一下如果這些字段在一個虛表中就容易操作多了,但是一般虛表是有其他表通過查詢得到,現(xiàn)在根本 無法查詢又哪來的虛表呢?聰明的朋友或許已經(jīng)想到可以使用"表值函數(shù)"。對,答案就是使用"表值函數(shù)"。我們知道"表值函數(shù)"可以返回一個"Table" 類型的變量(相當于一張?zhí)摫恚娣庞趦?nèi)存中),我們首先將字符串分割存放到"表值函數(shù)"的一個字段中,然后我們再從"表值函數(shù)"中查詢就可以了(這個例子 也是"表值函數(shù)"的一個典型應(yīng)用)。具體sql如下:
如何解析不固定參數(shù)的存儲過程
然后我們稍微修改一下存儲過程:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: jianxin160 -- Create date: 2010.11.05 -- Description: 統(tǒng)計商品 -- ============================================= 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ù)的存儲過程”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!