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
A
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. –
Sie sind auf der Suche nach 'vier joins' pro Verfahren oder' vier joins' für jede Aussage in dem Verfahren ? – gotqn
@gotqn, Ich suche nach vier Joins pro Erklärung in der Prozedur –