2016-07-01 10 views
0

Ich möchte die Anzahl der Joins abrufen, die in einem Abfrage-Batch der gespeicherten Prozedur verwendet werden. Ich brauche, dass beitreten für eine Charge zu validieren Zählung nicht 4 wie dies übersteigtAnzahl der Joins abrufen, die in der gespeicherten Prozedur verwendet werden

+0

Sie sind auf der Suche nach 'vier joins' pro Verfahren oder' vier joins' für jede Aussage in dem Verfahren ? – gotqn

+0

@gotqn, Ich suche nach vier Joins pro Erklärung in der Prozedur –

Antwort

0

Versuchen,

DECLARE @String NVARCHAR(4000) = 
    'CREATE PROCEDURE [dbo].[uspGetBillOfMaterials] 
@StartProductID [int], 
@CheckDate [datetime] AS BEGIN 

WITH [BOM_cte]([ProductAssemblyID], [ComponentID], [ComponentDesc], [PerAssemblyQty], [StandardCost], [ListPrice], [BOMLevel], [RecursionLevel]) -- CTE name and columns 
AS (
    SELECT b.[ProductAssemblyID], b.[ComponentID], p.[Name], b.[PerAssemblyQty], p.[StandardCost], p.[ListPrice], b.[BOMLevel], 0 -- Get the initial list of components for the bike assembly 
    FROM [Production].[BillOfMaterials] b 
     INNER JOIN [Production].[Product] p 
     ON b.[ComponentID] = p.[ProductID] 
    WHERE b.[ProductAssemblyID] = @StartProductID 
     AND @CheckDate >= b.[StartDate] 
     AND @CheckDate <= ISNULL(b.[EndDate], @CheckDate) 
    UNION ALL 
    SELECT b.[ProductAssemblyID], b.[ComponentID], p.[Name], b.[PerAssemblyQty], p.[StandardCost], p.[ListPrice], b.[BOMLevel], [RecursionLevel] + 1 -- Join recursive member to anchor 
    FROM [BOM_cte] cte 
     INNER JOIN [Production].[BillOfMaterials] b 
     ON b.[ProductAssemblyID] = cte.[ComponentID] 
     INNER JOIN [Production].[Product] p 
     ON b.[ComponentID] = p.[ProductID] 
    WHERE @CheckDate >= b.[StartDate] 
     AND @CheckDate <= ISNULL(b.[EndDate], @CheckDate) 
    ) 
-- Outer select from the CTE 
SELECT b.[ProductAssemblyID], b.[ComponentID], b.[ComponentDesc], SUM(b.[PerAssemblyQty]) AS [TotalQuantity] , b.[StandardCost], b.[ListPrice], b.[BOMLevel], b.[RecursionLevel] 
FROM [BOM_cte] b 
GROUP BY b.[ComponentID], b.[ComponentDesc], b.[ProductAssemblyID], b.[BOMLevel], b.[RecursionLevel], b.[StandardCost], b.[ListPrice] 
ORDER BY b.[BOMLevel], b.[ProductAssemblyID], b.[ComponentID] END;' 
    ,@SubString VARCHAR(255) = 'JOIN' 

SELECT (LEN(@String)-LEN(REPLACE(@String, @SubString, '')))/LEN(@SubString) as count 
+0

Danke! Jetzt kann ich die Anzahl der Join in der gesamten gespeicherten Prozedur erhalten. Immer noch gibt es einen Weg, wie ich die Anzahl der Joins in einer einzelnen Abfrage in einer gespeicherten Prozedur finden kann. Ich meine, können die Abfragen in einer gespeicherten Prozedur voneinander getrennt werden und nicht als eine einzelne Batch behandelt werden. –