Laden...

Probleme bei SP mit Report Designer

Erstellt von Lion1984 vor 14 Jahren Letzter Beitrag vor 14 Jahren 566 Views
L
Lion1984 Themenstarter:in
770 Beiträge seit 2006
vor 14 Jahren
Probleme bei SP mit Report Designer

verwendetes Datenbanksystem: MS SQL 2005

Hallo Forum,

ich habe gestern eine Abfrage für einen Report geschrieben, welche eigentlich nur einen Wert übers Jahr ausgibt. Diese sieht wiefolgt aus:

Die Abfrage sieht so aus:

SELECT 
	CASE [CheckoutMonth]
		WHEN 1 THEN 'January'
		WHEN 2 THEN 'February'
		WHEN 3 THEN 'March'
		WHEN 4 THEN 'April'
		WHEN 5 THEN 'May'
		WHEN 6 THEN 'June'
		WHEN 7 THEN 'July'
		WHEN 8 THEN 'August'
		WHEN 9 THEN 'September'
		WHEN 10 THEN 'October'
		WHEN 11 THEN 'November'
		WHEN 12 THEN 'December'
	END as 'Month',
	ISNULL([1],0) as '1', 
	ISNULL([2],0) as '2',
	ISNULL([3],0) as '3',
	ISNULL([4],0) as '4',
	ISNULL([5],0) as '5',
	ISNULL([6],0) as '6',
	ISNULL([7],0) as '7',
	ISNULL([8],0) as '8',
	ISNULL([9],0) as '9',
	ISNULL([10],0) as '10',
	ISNULL([11],0) as '11',
	ISNULL([12],0) as '12',
	ISNULL([13],0) as '13',
	ISNULL([14],0) as '14',
	ISNULL([15],0) as '15',
	ISNULL([16],0) as '16',
	ISNULL([17],0) as '17',
	ISNULL([18],0) as '18',
	ISNULL([19],0) as '19',
	ISNULL([20],0) as '20',
	ISNULL([21],0) as '21',
	ISNULL([22],0) as '22',
	ISNULL([23],0) as '23',
	ISNULL([24],0) as '24',
	ISNULL([25],0) as '25',
	ISNULL([26],0) as '26',
	ISNULL([27],0) as '27',
	ISNULL([28],0) as '28',
	ISNULL([29],0) as '29',
	ISNULL([30],0) as '30',
	ISNULL([31],0) as '31'
FROM
(
	SELECT
		Month(DateTimeField) as CheckoutMonth,	
		SUM(DataField),
		DAY(DateTimeField) as CheckoutDay
		
	FROM 
		(
			SELECT 
				DateDiff(dd,a.DateTimeField1,a.DateTimeField2) AS LOR,
				a.DateTimeField1
			FROM
				TableA AS a WITH (NOLOCK) LEFT OUTER JOIN
					TableB AS b WITH (NOLOCK) ON a.columnA = b.columnA AND 
						a.columnB < b.columnB
			WHERE     
				(b.columnB IS NULL)
					AND intField = @intValue
					AND stringField1 != 'XX'
					AND stringField2 != 'XX' ) data
	WHERE 
		YEAR(DateTimeField1) = @year
	
	GROUP BY Month(DateTimeField1), DAY(DateTimeField1)

	UNION 
		SELECT 1 , 0,  1 as CheckoutDay UNION
		SELECT 2 , 0,  1 as CheckoutDay UNION
		SELECT 3 , 0,  1 as CheckoutDay UNION
		SELECT 4 , 0,  1 as CheckoutDay UNION
		SELECT 5 , 0,  1 as CheckoutDay UNION
		SELECT 6 , 0,  1 as CheckoutDay UNION
		SELECT 7 , 0,  1 as CheckoutDay UNION
		SELECT 8 , 0,  1 as CheckoutDay UNION
		SELECT 9 , 0,  1 as CheckoutDay UNION
		SELECT 10 , 0,  1 as CheckoutDay UNION
		SELECT 11 , 0,  1 as CheckoutDay UNION
		SELECT 12 , 0,  1 as CheckoutDay 		
) s
PIVOT 
(
	SUM([DataField])
	FOR CheckoutDay IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31])
) p

TableA und TableB sind die selben Tabellen, nur muss ich den letzten Datensatz für ein "Produkt", "Kunde" oder ähnliches herausfiltern.

Die Abfrage funktioniert wunderbar, habe daraus eine SP gemacht und sie funktioniert einwandfrei aus dem Managment Studio. Nun habe ich mir mit dem Report Builder einen Report drum herum gebastelt, und dort braucht die Abfrage ewig lange und der SQLServer läuft mit 99% Auslastung. Nach einigen Tipps habe ich NOLOCK eingebaut, welches anschließend auch funktionierte. Die Abfrage war auch im Report Builder auch schnell.

Heute habe ich gecheckt, ob der Report auch so ist, wie es der "Auftraggeber" möchte, und um ihn auf ein Produktivsystem zu implementieren, habe ich die SP umbenannt. Nun stehe ich wieder vor dem Problem, dass aus dem Managment Studio die Abfrage flitzt, aber aus dem ReportDesigner nicht, dort hängt es sich auf oder braucht ewiiiigg lange.

Es sind aktuell ca. 180000 Datensätze in dieser Tabelle.
Kann mir jemand sagen, woran es hier scheitert? Was macht der ReportDesigner anders, als das SQL Managment Studio?

Lion

lg Lion

L
Lion1984 Themenstarter:in
770 Beiträge seit 2006
vor 14 Jahren

Hat sich eben erübrigt, bei den gestrigen Tipps war auch der Hinweiß auf "SET NOCOUNT ON" dabei, denn ich gestern verwendet hatte, aber anscheind nicht gespeichert hatte.

Nun habe ich diese Option wieder hinzugefügt, und es flitzt wieder dahin.
Lion

P.S. diese Tipps kamen von Kollegen, die einige Jahre länger schon mit SQL zu tun hatten, d.h. ich bin mir nicht sicher ob es DIE Lösung ist, aber die Beschreibung von SET NOCOUNT ON scheint für mich passend zu sein, um das auch zu verwenden.

lg Lion