如何使用TVP在存储过程的单个参数中传递多个值?

时间:2018-01-18 08:01:18

标签: sql-server

我想在同一个参数中传递多个品牌名称。我试图使用TVP来解决这个问题但是有一些问题。

以下是示例代码:

CREATE TYPE BRAND AS TABLE
(
    BRANDName NVARCHAR(MAX) NOT NULL
)

create proc SALES @Brandparameter BRAND READONLY AS

create table #sales(Categories,Volume)
insert into #sales(Categories,Volume)
select categories,sum(case when Brand=@Brandparameter then [volume] end)
from sales_table
group by categories

exec SALES @BRANDNAMES

DECLARE @BRANDNAMES AS BRAND
INSERT INTO @BRANDNAMES 
VALUES('Brand1'),('Brand2')

执行该程序时,会出现以下错误:

  

必须声明标量变量" @ BRANDNAMES"

这是sales_table

_______________________________
| Categories | Brand | volume |
|-----------------------------|
| Category 1 | Brand1| 1000   |
| .......    | ..... | .....  |
|_____________________________|

1 个答案:

答案 0 :(得分:0)

由于@Brandparameter是一种表格类型,你必须以与使用表格相同的方式使用它(即从中选择SELECT),所以你需要这样的东西:

SELECT Categories, 
       SUM(CASE WHEN Brand IN (SELECT BRANDName FROM @Brandparameter) THEN [Volume] END)
FROM   sales_table
GROUP BY Categories;