it-swarm.com.de

Übergeben Sie eine Tabellenvariable an eine gespeicherte SQL Server-Prozedur

Ich versuche eine Tabellenvariable an eine gespeicherte Prozedur zu übergeben und erhalte den Fehler:

Operandentypkonflikt: Tabelle ist mit TY_MyType nicht kompatibel

Hier sind die relevanten Code-Teile:

1 - Typdefinition

CREATE TYPE [dbo].[TY_MyType] AS TABLE(
        [Sampling_ID]               [int]           NULL,
        [Parameter_Name]            [nvarchar](32)  NULL,
        [Measuring_Method_Code]     [int]           NULL,
        [Greater_or_Smaller]        [varchar](1)    NULL,
        [Parameter_Value]           [float]         NULL,
        [Measured_By]               [int]           NULL,
        [No_Measurement_Code]       [int]           NULL,
        [No_Measurement_Comments]   [varchar](512)  NULL,
        [Update_Reason_Code]        [int]           NULL,
        [General_Comment]           [varchar](512)  NULL
) ;

2 - Lokale Tabellenvariable, die innerhalb der aufrufenden Prozedur deklariert wurde (Es gibt ein INSERT, das Daten in diese lokale Tabellenvariable einfügt, bevor sie an eine andere Prozedur übergeben werden.)

DECLARE @_l_Tempo_Table TABLE ( Sampling_ID             INT             ,
                                Parameter_Name          NVARCHAR(32)    ,
                                Measuring_Method_Code   INT             ,
                                Greater_or_Smaller      VARCHAR(1)      ,
                                Parameter_Value         FLOAT           ,
                                Measured_By             INT             ,
                                No_Measurement_Code     INT             ,
                                No_Measurement_Comments VARCHAR(512)    ,
                                Update_Reason_Code      INT             ,
                                General_Comment         VARCHAR(512)
                              ) ;

- Verfahrenserklärung

CREATE PROCEDURE [p_DATA_Save_Sampling_Results]   (
                                        @_p_Results         [UWQ].[TY_MyType] READONLY   ,
                                        @_p_Result_Code     INT             OUTPUT       ,
                                        @_p_Result_Message  NVARCHAR(2000)  OUTPUT
                                                  ) 
AS
:
:

4 - Prozeduraufruf

EXEC p_DATA_Save_Sampling_Results   @_l_Tempo_Table             ,
                                    @_l_Result_Code    OUTPUT   ,       -- Integer param
                                    @_l_Result_Message OUTPUT     ;     -- String

Der Aufruf schlägt mit der oben genannten Fehlermeldung fehl, die darauf hinweist, dass zwischen den übergebenen und den erwarteten Tabellen eine Inkonsistenz besteht, aber ich kann nicht herausfinden, wo diese Inkonsistenz liegen könnte.

10
FDavidov

Sie müssen eine Variable Ihres Typs deklarieren, die Daten dort eintragen und die Prozedur mit dieser Typvariablen aufrufen, nicht mit einer Tabellenvariablen.

wie unten :

DECLARE @@_l_Tempo_Table AS TY_MyType;  

sie haben wie folgt erklärt

DECLARE @_l_Tempo_Table TABLE

Siehe https://docs.Microsoft.com/en-us/sql/relational-databases/tables/use-table-valued-parameters-database-engine

11
IngoB