Instruction SQL Merge utilisant un proc stocké comme source

Je cherche à faire quelque chose comme ça mais ça ne comstack pas. Ma procédure stockée renvoie une table. Voici ce que j'essaie de faire – peut-être que quelqu'un peut pointer vers ce que je fais mal car cela ne comstack pas:

MERGE table AS target USING (EXEC [dbo].[sp_Something] @Rundate = '5/13/2011', @SPID = 56) AS source (<Columns Returned By Stored Proc Go Here>) ON TARGET.ID = SOURCE.ID WHEN MATCHED THEN UPDATE SET Field = Value... WHEN NOT MATCHED THEN INSERT ( Field ) VALUES (Value); 

Une procédure stockée ne peut pas être utilisée lorsque les tables sont attendues. Vous devez utiliser une variable de table, une sous-requête ou une fonction table. Par exemple (je ne sais pas si c'est valide, je n'ai jamais utilisé MERGE auparavant):

 DECLARE @Something TABLE (columns go here...) INSERT @Something EXEC [dbo].[sp_Something] @Rundate = '5/13/2011', $SPID = 56 MERGE table as target USING @Something AS Source ... 

Vous ne pouvez INSERT ... EXEC . La solution consiste à spouler une table #temp ou une variable @table et à l'utiliser pour le MERGE.

Parfois, je crée des fonctions ou des vues qui returnnent ce que ferait un sproc, puis j'écris le sproc pour appeler simplement la vue / fonction. De cette façon, je encapsule la logique, je suis capable d'utiliser la requête dans les jointures et de tirer parti des fonctionnalités de sproc.