2017-04-14 3 views
1

T-SQLの新機能です。現在、ストアドプロシージャの入力パラメータで苦労しています。ストアドプロシージャの入力パラメータとしてのT-SQLカスタムデータ型

SalesAreasのリストを私のストアドプロシージャに渡したいと思います。 SalesAreaはいくつかのcountryIdといくつかのbool値を持つことができますが、C#ではクラスを想像してください。

私は、ストアドプロシージャにそれを渡すために自分自身のデータ型を作成するために始めた:私はtSalesAreasのリストを渡したいストアドプロシージャで

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

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

@SalesAreas tSalesArea READONLY 

問題を:tSalesAreaのデータ型として私のtIdListを使用することはできません。

私は2つの営業エリア挿入した場合(1:countryIds 3,5; 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 Or Json、または解析する文字列...常に選択肢があります。しかし、テーブル値のパラメータはより意味的に適切であり、通常は他のオプションよりも優れたパフォーマンスを発揮します。 – SqlZim

関連する問題