2017-04-14 4 views
1

Ich bin ziemlich neu in T-SQL, ich habe gerade mit einem Eingabeparameter für meine gespeicherte Prozedur zu kämpfen.T-SQL Benutzerdefinierter Datentyp als Eingabeparameter für gespeicherte Prozedur

Ich möchte eine Liste von SalesAreas an meine gespeicherte Prozedur übergeben. A SalesArea kann mehrere countryIds und einige bool-Werte haben, stellen Sie sich eine Klasse in C# vor.

Ich begann meinen eigenen Datentyp zu schaffen es in die gespeicherte Prozedur zu übergeben:

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

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

In der gespeicherten Prozedur ich in einer Liste von tSalesAreas übergeben mag:

@SalesAreas tSalesArea READONLY 

Das Problem : Ich kann meine tIdList nicht als Datentyp für tSalesArea verwenden.

Wenn ich einfügen 2 Verkaufsgebiete (1: countryIds 3,5; 2: countryid 7), wird es in etwa so aussehen:

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

Wissen Sie, wie dieses Problem zu lösen?

Danke!

Antwort

1

Sie können einen Tabellentyp nicht als Spalte (es ist ein Tabellentyp) in SQL Server verwenden.

Erstellen Sie stattdessen die tSalesArea mit Spalten, die benötigt werden, um den gewünschten Eingang auszudrücken.

+0

Sie könnten stattdessen auch einen XML-Parameter als Ersatz für eine Tabelle übergeben. –

+2

@JohnEisbrener Oder JSON, oder eine Zeichenfolge, die du parsen musst ... Es gibt immer Alternativen. Tabelle-Wert-Parameter sind jedoch semantisch angemessener, und _usually_ führen viel besser als andere Optionen aus. – SqlZim

Verwandte Themen