怎样解析不固定参数的存储过程

107次阅读
没有评论

共计 2466 个字符,预计需要花费 7 分钟才能阅读完成。

自动写代码机器人,免费开通

丸趣 TV 小编给大家分享一下怎样解析不固定参数的存储过程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

如何解析不固定参数的存储过程

假设现在给你一个产品信息列表(显示出各个商品的基本信息),现在我想要根据所选择商品进行统计(任意选择几种),例如统计出价 格 10,11-20,21-30,31-40,41-50,50 以上的商品个有多少个(姑且认为就统计这些)。此时如果使用存储过程就势必需要传 入所选商品的 id 作为参数,但是 id 个数是不固定的。此时估计会有人这样写:

SET ANSI_NULLS ON
 SET QUOTED_IDENTIFIER ON
 -- =============================================
 -- Description:  统计商品
 -- =============================================
 ALTER PROCEDURE StatProductInfo
 @ids VARCHAR(8000)
 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 
 GO

其实如果你测试一下 (例如:EXEC dbo . StatProductInfo 3,4,8,10,22) 是有问题的,sql server 认为这整个是一个参数,转换时出错。此时我们想一下如果这些字段在一个虚表中就容易操作多了,但是一般虚表是有其他表通过查询得到,现在根本 无法查询又哪来的虚表呢? 聪明的朋友或许已经想到可以使用 表值函数。对,答案就是使用 表值函数。我们知道 表值函数 可以返回一个 Table 类型的变量(相当于一张虚表,存放于内存中),我们首先将字符串分割存放到 表值函数 的一个字段中,然后我们再从 表值函数 中查询就可以了(这个例子 也是 表值函数 的一个典型应用)。具体 sql 如下:

如何解析不固定参数的存储过程

然后我们稍微修改一下存储过程:

SET ANSI_NULLS ON
 SET QUOTED_IDENTIFIER ON
 -- =============================================
 -- Author: jianxin160
 -- Create date: 2010.11.05
 -- Description:  统计商品
 -- =============================================
 ALTER PROCEDURE StatProductInfo
 @ids VARCHAR(8000)
 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 
 GO

这样通过执行 EXEC dbo . StatProductInfo 3,4,8,10,22 就可以得到想要的结果了。

以上是“怎样解析不固定参数的存储过程”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2466字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)