T-SQL自定义数据类型作为存储过程的输入参数

时间:2017-04-14 15:23:42

标签: sql-server tsql stored-procedures

我对T-SQL很陌生,我目前正忙着为我的存储过程输入参数。

我想将SalesAreas的列表传递给我的存储过程。 SalesArea可以有几个countryIds和一些bool值,想象一下C#中的一个类。

我开始创建自己的数据类型,将其传递给存储过程:

CREATE TYPE tIdList AS TABLE 
(
    ID INT NULL
);
GO

CREATE TYPE tSalesArea AS TABLE
(
    CountryIds tIdList NULL,
    IsLargeClient BIT NULL,
    IsSmallClient BIT NULL,
);
GO

在存储过程中,我想传递tSalesAreas

的列表
@SalesAreas tSalesArea READONLY

问题:我无法将tIdList用作tSalesArea的数据类型。

如果我插入2个销售区域(1:countryIds 3,5; 2:countryId 7),它将如下所示:

Id | SalesAreaId | CountryId 
---+-------------+-----------
1  |     1       |     3
2  |     1       |     5
3  |     2       |     7

你知道如何解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您不能在sql server中将表类型用作列(它是表类型)。

相反,请创建tSalesArea,其中包含表达所需输入所需的列。

create type tSalesArea as table (
    SaleAreaId int not null
  , CountryIds int not null
  , IsLargeClient bit null
  , IsSmallClient bit null
);