2017-04-14 57 views
1

我對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 

你知道如何解決這個問題?

謝謝!

回答

1

在sql server中不能使用表類型作爲列(它是一個表類型)。

取而代之的是,創建tSalesArea,其中包含表示所需輸入的列。

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

您也可以傳入XML參數作爲表的替代。 –

+2

@JohnEisbrener或Json,或者你必須解析的字符串......總是有其他選擇。但是,表值參數在語義上更合適,並且_usually_表現得比其他選項好得多。 – SqlZim

相關問題