J'essaie de passer une variable de table à une procédure stockée et j'obtiens l'erreur:
Clash de type opérande: la table est incompatible avec TY_MyType
Voici les morceaux de code pertinents:
1 - Définition de type
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 - Variable de table locale déclarée dans la procédure d'appel (il y a un INSERT qui injecte des données dans cette variable de table locale avant de les passer à une autre procédure)
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)
) ;
- Déclaration de procédure
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 - Appel de procédure
EXEC p_DATA_Save_Sampling_Results @_l_Tempo_Table ,
@_l_Result_Code OUTPUT , -- Integer param
@_l_Result_Message OUTPUT ; -- String
L'invocation échoue avec le message d'erreur mentionné ci-dessus, qui semble indiquer qu'il existe une incohérence entre les tables passées et attendues, mais je ne peux pas comprendre où une telle incohérence pourrait être.
Vous devez déclarer une variable de votre type, y remplir les données et appeler la procédure avec cette variable de type, pas avec une variable de table.
comme ci-dessous:
DECLARE @@_l_Tempo_Table AS TY_MyType;
vous avez déclaré comme ci-dessous
DECLARE @_l_Tempo_Table TABLE