Ich habe Schwierigkeiten, eine Abfrage hier zu verstehen. Meine Abfrage gibt letztendlich eine Ergebnismenge in einem Bericht zurück, in der Sie eine Person im Parameter angeben können, um ihre Daten anzuzeigen. Ich verbinde meine Dimension-Tabelle mit meiner Employee-Tabelle, um den Namen aus der Employee-Tabelle zurückzugeben. Es sieht so etwas wie dieserAbfrage hängt mit Parameter in WHERE-Klausel
Declare @PM varchar(30)
Set @PM = 'John Smith'
SELECT....FullName, EmployeeID, ....
FROM...
Inner Join EmployeesT on emp.EmployeeNumber = DimP.PersonID
WHERE FullName in (@PM)
Hinweis: Meine Employee-Tabelle ist in nvarchar und Dimension ist varchar aber ich glaube nicht, dass Fragen wie die nach wie vor kommen funktionieren.
Jetzt habe ich oben einen Parameter zum Testen gesetzt.
Hier ist mein Problem: Wenn ich die WHERE
-Klausel zu WHERE DimP.PersonID IN ('12345')
sagen, dauert meine Abfrage 3 Sekunden zu laufen. Wenn ich die Abfrage in WHERE FullName in (@PM)
ändere dauert die Abfrage für immer; Es hängt und läuft für 5+ Menuette. Hat jemand ein ähnliches Problem erlebt?
Die Ergebnismenge erzeugt die richtigen Daten mit mehreren „Menschen“ und ich möchte dies testen, indem eine Person Angabe keine ID, aber wenn ich die Parameter auf den Namen der Abfrage hängt ..
Das Leistungsproblem hängt mehr mit der Tabellenstruktur und den Indizes zusammen. Auch wenn Sie nur einen Namen eingeben, warum setzen Sie nicht einfach "WHERE FullName = @ PM"? – momar
Ich habe das versucht und hatte das gleiche Problem. Es wurde gelöst, indem die folgende CASE-Anweisung unten hinzugefügt wurde. Ich habe keine Ahnung, warum – Geo
Ich bin mir nicht sicher, ob die case-Anweisung korrekt ist, da es nichts zurückzugeben scheint. Sie sollten wahrscheinlich die vollständige Abfrage in der Frage veröffentlichen. Darüber hinaus kann das Leistungsproblem das Ergebnis eines fehlerhaften Ausführungsplans sein. Siehe Diskussion hier: https://www.brentozar.com/archive/2014/06/tuning-stored-procedures-local-variables-problems/ – momar