共计 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 问一下细节