Welcome to the POB User Group Online Community! › Forums › PUG DACH › SDM: SQL Item_Item Abfrage in PQL?
- This topic has 7 replies, 3 voices, and was last updated 5 years ago by
ms.
-
AuthorPosts
-
12/02/2016 at 19:06 #3275
Marc Dittberner
MemberHoi Pugler,
ich möchte mein Memo in einem Fall ergänzen um die Informationen aus ein Item-Auswahl im Web-Formular. Exemplarisch habe ich es mit SQL und einer definitiven Item ID programmiert.
Das gibt mir das gewünschte Ergebnis! Wie so oft muss ich das jedoch in PQL-Form bringen – kann mir damit jemand helfen?Vielen Dank und schönes Wochenende!
Marc
Declare @Stelle as varchar(1000) set @Stelle='Stellenrolle_DSS_Produktionsleiter_Köln' select it.id as Oberrolle, ite.id as Unterobjekt, u.description as Administrator from Item_Item ii inner join item it on it.item_pk = ii.base_item_pk inner join Item ite on ite.item_pk=ii.alternative_item_pk left join User_Table u on u.user_pk = ite.reponsible_user_pk where ii.base_item_pk=( select item_pk from Item i where i.id=@Stelle) union select it.id as Recht1, ite.id as Recht2, u.description as Administrator from Item_Item ii inner join item it on it.item_pk = ii.base_item_pk inner join Item ite on ite.item_pk=ii.alternative_item_pk left join User_Table u on u.user_pk = ite.reponsible_user_pk where ii.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk= (select i.item_pk from Item i where i.id=@Stelle)) union select it.id as Recht2, ite.id as Recht3, u.description as Administrator from Item_Item ii inner join item it on it.item_pk = ii.base_item_pk inner join Item ite on ite.item_pk=ii.alternative_item_pk left join User_Table u on u.user_pk = ite.reponsible_user_pk where ii.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk= (select i.item_pk from Item i where i.id=@Stelle))) union select it.id as Recht3, ite.id as Recht4, u.description as Administrator from Item_Item ii inner join item it on it.item_pk = ii.base_item_pk inner join Item ite on ite.item_pk=ii.alternative_item_pk left join User_Table u on u.user_pk = ite.reponsible_user_pk where ii.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk= (select i.item_pk from Item i where i.id=@Stelle)))) union select it.id as Recht4, ite.id as Recht5, u.description as Administrator from Item_Item ii inner join item it on it.item_pk = ii.base_item_pk inner join Item ite on ite.item_pk=ii.alternative_item_pk left join User_Table u on u.user_pk = ite.reponsible_user_pk where ii.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk= (select i.item_pk from Item i where i.id=@Stelle))))) union select it.id as Recht5, ite.id as Recht6, u.description as Administrator from Item_Item ii inner join item it on it.item_pk = ii.base_item_pk inner join Item ite on ite.item_pk=ii.alternative_item_pk left join User_Table u on u.user_pk = ite.reponsible_user_pk where ii.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk= (select i.item_pk from Item i where i.id=@Stelle)))))) union select it.id as Recht6, ite.id as Recht7, u.description as Administrator from Item_Item ii inner join item it on it.item_pk = ii.base_item_pk inner join Item ite on ite.item_pk=ii.alternative_item_pk left join User_Table u on u.user_pk = ite.reponsible_user_pk where ii.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk= (select i.item_pk from Item i where i.id=@Stelle))))))) union select it.id as Recht7, ite.id as Recht8, u.description as Administrator from Item_Item ii inner join item it on it.item_pk = ii.base_item_pk inner join Item ite on ite.item_pk=ii.alternative_item_pk left join User_Table u on u.user_pk = ite.reponsible_user_pk where ii.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk in (select itit.alternative_item_pk from item_item itit where itit.base_item_pk= (select i.item_pk from Item i where i.id=@Stelle)))))))) order by Administrator
16/02/2016 at 10:14 #3276Stefan Reichelt
ParticipantPuh, das sieht nach viel Arbeit aus. Aber warum willst du es in PQL umwandeln? Leg doch einfach eine View an, auf die du dann z.B. in berechneten virtuellen Spalten zugreifen kannst…
Grüße,
Stefan
16/02/2016 at 18:53 #3277Marc Dittberner
MemberDas sind die Inhalte von Berechtigungsanträgen, sprich in dem Memo sollen für die Admins die betroffenen Rechte eingefügt werden.
Eine View ist eventuell eine Lösung, aber auch dort ist die Hürde, dass ich die Item_Item mehrmals auslesen muss respektive alternative_item_pk immer wieder auf die Ergebnis-base_item_pk setzen bis es keine mehr gibt und alles gesammelt anzeige …Ist das oben in PQL möglich … Irgendwie hört sich das ganze nach einem Loop an, doch so etwas habe ich in PQL noch nie probiert …
16/02/2016 at 22:04 #3278Stefan Reichelt
ParticipantMir sieht das zu komplex aus, um es mit PQL umzusetzen. Aber vielleicht liegt es auch daran, dass es jetzt ziemlich viel Zeit kosten würde, in ein derart umfangreiches Statement einzusteigen und alles noch einmal aufzudröseln. Ich würde es immer noch als SQL-View hinterlegen. Mit den neuen SQL-Abfragemöglichkeiten in v1.7 sollte es dann sogar möglich sein, die Ergebnisse direkt aus der View abzufragen und ins Memo zu übertragen.
Eine SQL-View hat den großen Vorteil, dass sie sich viel leichter administrieren lässt, als ein riesiges PQL-Statement in einem dafür eigentlich nicht gedachten Feld.
Selbst “Loops” sollten übrigens möglich sein, evtl. per Stored Procedure. Aber aus dem Kopf reichen meine SQL-Kenntnisse dafür nicht aus.18/02/2016 at 14:15 #3280ms
KeymasterDas ganze könnte auch in einer db stored procedure verpackt und als custom function dem PQL dialakt bekannt gemacht werden. Dann könnte die funtion inkl. dem parameter beliebig per PQL aufgerufen werden. Jedoch müsste die stored procedure dann die ergebnissmenge konkatenieren und nur einen Wert zurückgeben.
Viele Grüße,
Christian11/03/2016 at 19:29 #3309Marc Dittberner
MemberHört sich aufwändig an! Wie lernt man das? Gibt es zu den Proceduren Anleitungen?
13/03/2016 at 20:41 #3311Stefan Reichelt
ParticipantDie MSDN erklärt eine Menge, aber vielleicht hast du ja einen SQL-Experten zur Hand, der dir das alles live erklären kann? Ich behaupte mal, dass der autodidaktische Weg bei solchen Themen sehr zeitraubend ist.
https://msdn.microsoft.com/de-de/library/ms345415%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396
14/03/2016 at 10:18 #3325ms
KeymasterSobald die gewünschte Abfrage dann in einer SQL Server Function oder Stored Procdure eingebettet ist…
Erstellen von benutzerdefinierten Funktionen
https://msdn.microsoft.com/de-de/library/ms191320%28v=sql.120%29.aspx… kannst Du diese dann dem PQL (NHibernate) Dialekt bekanntmachen.
Das wäre dann ein passender Eintrag in der Wendia.POB.exe.custom.config.Beispiel
<sqlDialectSettings> <dialects> <add database="mssql"> <clear/> <add name="helloworld" sqlFunctionType="SQLFunctionTemplate" returnType="String" expression="dbo.helloworld(?1)"/> </add> </dialects> </sqlDialectSettings>
Gruß aus MUC,
Christian -
AuthorPosts
- You must be logged in to reply to this topic.