T-SQL自定义数据类型作为存储过程的输入参数
问题描述:
我对T-SQL相当陌生,目前我正在为存储过程使用输入参数而挣扎。T-SQL自定义数据类型作为存储过程的输入参数
我想将SalesAreas
的列表传递给我的存储过程。 A 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:3,5 countryIds; 2:countryId 7),这将是这个样子:
Id | SalesAreaId | CountryId
---+-------------+-----------
1 | 1 | 3
2 | 1 | 5
3 | 2 | 7
你知道如何解决这个问题?
谢谢!
答
在sql server中不能使用表类型作为列(它是一个表类型)。
取而代之的是,创建tSalesArea
,其中包含表示所需输入的列。
create type tSalesArea as table (
SaleAreaId int not null
, CountryIds int not null
, IsLargeClient bit null
, IsSmallClient bit null
);
您也可以传入XML参数作为表的替代。 –
@JohnEisbrener或Json,或者你必须解析的字符串......总是有其他选择。但是,表值参数在语义上更合适,并且_usually_表现得比其他选项好得多。 – SqlZim