Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst SQL Statement auseinandernehmen Like

Mitglied: H41mSh1C0R

H41mSh1C0R (Level 3) - Jetzt verbinden

13.09.2016 um 12:16 Uhr, 973 Aufrufe, 20 Kommentare

Hi@All,

Ziel:
Beim erstellen eines Reports existiert ein Feld in der eine bestimmte OU ausgewählt werden kann.
Wird keine ausgewählt gilt die Auswahl auf alle, ansonsten auf die die ausgewählt wurde.

Problem:
Aktuell bekomme ich auch Rechner aus anderen OUs die garnicht in der Schnittmenge enthalten sein dürften.

01.
and [OU] like case when @Parameter_OU = 'ALL' then '%' Else ('%' + @Parameter_OU + '%') end
Wenn ich das Statement richtig lese wird:
- wenn ALL ausgewählt wurde alle OUs genommen die in der Liste sind
- wenn direkt eine OU ausgewählt worden ist, wird diese genommen

Oder habe ich da was gänzlich missverstanden?

Gruß
Mitglied: MadMax
13.09.2016 um 12:41 Uhr
Hallo H41mSh1C0R,

das stimmt so nicht ganz, durch das like werden alle die geholt, die @parameter_OU enthalten.
D.h. wenn Du nach 'xyz' suchst, bekommst Du auch 'abxyz' und 'xyzz'.

Wenn nur exakt das gesuchte zurückkommen soll, dann müßte die Abfrage lauten:
01.
and [OU] = case when @Parameter_OU = 'ALL' then [OU] Else @Parameter_OU end
Außerdem hast Du nicht die komplette Where-Bedingung hier reingeschrieben. Wenn da noch irgendwo ein "or" drin ist, dann kann dabei noch sonstwas dazugelesen werden.

Gruß, Mad Max
Bitte warten ..
Mitglied: em-pie
13.09.2016 um 12:46 Uhr
Moin,

Von der Syntax her scheint der Schnippsel ja richtig zu sein.

Was kommt denn dabei rum, wenn du dein "CASE When" mit in den Select-Bereich einbindest?
Also

01.
Select
02.
 -- prüfen, ob die CASE-Clause überhaupt greift
03.
  case 
04.
    when @Parameter_OU = 'ALL' then 'ALLE' 
05.
    Else 'Selektiert'
06.
  end as "TEST"
07.
from
08.
 blablabla
Und wie sieht dein Where-Statement in Gänze aus?
Nicht, dass dort irgendwo noch ein OR enthalten ist und dadurch zu deinem o.g. Statement eine alternative Auswahl (ungewollT) dargestellt wird.

Mit mehr Infos könnte man vermutlich etwas mehr Hilfe geben:
  • Welcher SQL-Server? (DB2, MSSQL 2005, Oracle, ...)
  • Was ist in OU enthalten?
  • Was ist in @parameter_OU enthalten
  • Wie lang sind die Felder deklariert?
  • Wie sieht dein gesamten (Where-)Statement aus?


Gruß
em-pie
Bitte warten ..
Mitglied: H41mSh1C0R
13.09.2016, aktualisiert um 12:53 Uhr
Hi Mad Max,

schonmal danke, werd ich ausprobieren.

Sind die "=" notwendig?

Alle Bestandteile/Filter sind mit UND verknüpft und da das die einzige Zeile ist die die OU filtert wird das Problem in dieser Zeile sein.

Gruß

EDIT:
@em-pie
Auch dir danke schonmal.

Immo wird SQL 2008 Express benutzt als DB.

Das gesammte Statement müsste ich abschreiben(immo 16 Zeilen), das ist grad etwas heftig. ^^
Der Select geht über eine Tabelle in der dann gefiltert wird, mitunter auch die OU. Als OU geht z.B. der Standort durch(Köln, Berlin usw. usw.). In Parameter_OU sind quasi die Standorte in einer Dropdown Liste zur Auswahl, so das man den Report nach Standort ausführen kann. =)
Bitte warten ..
Mitglied: MadMax
13.09.2016 um 13:16 Uhr
Hallo H41mSh1C0R,

was heißt 'Sind die "=" notwendig?'? Irgendeinen Vergleichsoperator brauchst Du. Nach Deiner Anforderung hat sich das '=' richtig angehört

Gruß, Mad Max
Bitte warten ..
Mitglied: em-pie
13.09.2016 um 13:41 Uhr
naja Copy&Paste wäre ja auch machbar, zur Not via Textdatei.

Aber weiter im Text.
Der Hinweis von MadMax, dass du die %-Zeichen im Else-Zweig weglassen kannst, ist berechtigt.
Ich hatte gedacht, du wolltest dann, wenn die USer "Köln" auswählen auch OUs wie Neuköln oder Köln-Deutz haben

Ansonsten prüfe mal deine Tabelle, in der die Zurodnung OU = Parameter_OU enthalten ist
nicht, dass da irgendwie Werte doppelt vorkommen:
01.
Parameter_OU | OU
02.
Berlin       | OU-Berlin
03.
Köln         | OU-Köln
04.
Köln         | OU-Dortmund
05.
Hamburg      | OU-Hamburg

Und das = musst du mitnehmen, wäre, als wolltest du eine Abfrage über Merkmale von fahrzeugen starten:
Zeige alle Fahrzeuge mit Räder 3
Das System wüsste ja ncht, sollen es weniger als drei Räder sein oder exakt 3 Räder oder mehr als 3 Räder
Bitte warten ..
Mitglied: H41mSh1C0R
13.09.2016 um 14:01 Uhr
Copy & Paste ginge nur, wenn beides auf der selben Maschine läuft. Remote komm ich auch nicht dran, ist 100% getrennt. *gg*
Wenn ich anfange hier mit Sticks zu hantieren gibts auch ........ . Keine Chance

Der Select läuft auf einer DB fürs Patchen. In den OU's sind Standorte gegliedert und unter den OUs können noch Bereiche untergliedert sein.

01.
Köln
02.
   Bereich 1
03.
   Bereich 2
04.
Berlin
05.
   Bereich 3
06.
   Bereich 4
Wenn nun einer OU Köln auswählt sollen halt alle Rechner einbezogen werden aus Bereich 1 und 2.
Momentan zeigt sich das allerdings so das auch Rechner aus 3 und 4 eingebunden werden.

In der Tabelle gibt es als Spalte OU. Das @parameter_OU ist ein Value in einem Label aus dem Report.

Trotzdem schonmal fettes Danke euch beiden. Ich melde mich.
Bitte warten ..
Mitglied: ice.polar
LÖSUNG 13.09.2016 um 14:07 Uhr
Hi

ich sehe das anders:
Diese case Statements kann man auflösen, je nachdem die Bedingung erfüllt ist oder nicht.
and [OU] like case when @parameter_OU = 'ALL' then '%' Else ('%' + @parameter_OU + '%') end

das ergibt im Falle dass @parameter_OU = 'ALL' ist:
and [OU] like '%'
Datensätze wo [OU] NULL ist werden dabei nicht ins Resultat übernommen!

falls der Wert in @parameter_OU <> 'ALL' ist (z.B. 'Köln') resultiert folgendes Kriterium:
and [OU] like '%Köln%'

falls der Wert in @parameter_OU = 'Köln, Frankfurt, Berlin' ist, resultiert folgendes Kriterium:
and [OU] like '%Köln, Frankfurt, Berlin%'
was wahrscheinlich nichts schlaues als Resultat gibt!

und falls der Wert in @parameter_OU leer ist (z.B. eine Zeichenkette mit der Länge Null)
and [OU] like '%%')

schliesslich falls @parameter_OU einen undefinierten Zustand hat (in SQL Server nennt man das NULL), dann gibts:
and [OU] LIKE NULL
und damit ist diese ganze Bedingung "ungültig"...

Das sind keine einfachen Bedingungen aber testweise einfach reproduzierbar.
Bitte warten ..
Mitglied: H41mSh1C0R
13.09.2016 um 14:36 Uhr
Hier mal der komplette Teil relevante Teil:
Es gibt 6 unterschiedliche States, das ist der für Parameter_State=1.

01.
declare @crlf char(2)
02.
--declare @Parameter_State int
03.
--set @crlf = char(13) + char(10)
04.
--set @Parameter_State = 1
05.
set @crlf = char(13) + char(10)  
06.

07.
if @Parameter_State = 1 Begin
08.
select convert(nvarchar(500),('KB-Article: ' + KBArticleId + @crlf + 'Security BulletinID: ' +ISNUll([Security BulletinID],'not exists') ) ) AS 'Patch',* from v_PatchMan
09.
where Status=1 and [Reboot Required]='No'
10.
  and ComputerID in (@Parameter_Computername)
11.
  and KBArticleId in (@Parameter_Patch)
12.
  and Active in (@Parameter_isActiv)
13.
  and [Reboot Required] in (@Parameter_RebootReq)
14.
  and [OU] like case when @Parameter_OU = 'All' then '%' Else ('%' + @Parameter_OU + '%') end
15.
  and SUBSTRING(OU,0,CHARINDEX(',',OU)) = ANY (select NAME from PermittedObj(@UserName))
16.
  and Prima in (@Parameter_Prima)
17.
  and [Severity from Group] in (@Parameter_Severity)
18.
  and Groups like case when @Parameter_Groups = 'All' then '%' Else ('%' +@Parameter_Groups + ',' + '%') End
19.
  and [Dynamic Groups] like case when @Parameter_DynGroups = 'All' then '%' Else ('%' + @Parameter_DynGroups + ',' + '%') End
20.
end
Bitte warten ..
Mitglied: MadMax
13.09.2016 um 14:38 Uhr
Hallo H41mSh1C0R,

der Einwand von ice.polar mit dem NULL-Wert ist grundsätzlich mal richtig, aber dürfte bei Dir nicht das Problem sein, weil das nämlich, wenn es auftreten kann, zu weniger Ergebnissen führt, als zu mehr. Ob [OU] oder @parameter_OU NULL werden können, mußt Du wissen und dann ggf. mit IsNull o.ä. abfangen.

Aber: wenn Du mit dem hier geschriebenen noch nicht Dein Problem gelöst hast, dann wirst Du wohl in den sauren Apfel beißen müssen und den Befehl abschreiben. Dann liegt nämlich das Problem wohl doch woanders und hellsehen kann hier glaube ich keiner. Hab ich zumindest noch nicht mitbekommen

Jedenfalls behaupte ich mal, wenn Du den Befehl gleich komplett abgeschrieben hättest, wäre Dein Problem wahrscheinlich schon gelöst. Und somit schneller gegangen als dieses ganze hin und her.

Gruß, Mad Max
Bitte warten ..
Mitglied: H41mSh1C0R
13.09.2016 um 14:40 Uhr
Hi Mad Max,

grad 2 Minuten vor deinem Post gepostet. =)

Gruß
Bitte warten ..
Mitglied: em-pie
13.09.2016 um 14:52 Uhr
Schaut auf den ersten Blick OK aus.


Zitat von H41mSh1C0R:

Hi Mad Max,

Der Select läuft auf einer DB fürs Patchen. In den OU's sind Standorte gegliedert und unter den OUs können noch Bereiche untergliedert sein.
01.
Köln
02.
   Bereich 1
03.
   Bereich 2
04.
Berlin
05.
   Bereich 3
06.
   Bereich 4
Wenn nun einer OU Köln auswählt sollen halt alle Rechner einbezogen werden aus Bereich 1 und 2.
Momentan zeigt sich das allerdings so das auch Rechner aus 3 und 4 eingebunden werden.
In der Tabelle gibt es als Spalte OU. Das @parameter_OU ist ein Value in einem Label aus dem Report.

Wie willst du denn die Subbereiche abfragen?
Also wie sieht das Feld [OU] Inhaltlich aus?
stehen da die Werte wie "OU=Bereich 1, OU=Köln, OU=Regionen, OU=Company, DC=Company, DC=local" ?
Bitte warten ..
Mitglied: H41mSh1C0R
13.09.2016 um 14:59 Uhr
In der DB heißt die Spalte so.

Im Report kann man dort aus der Liste einen oder mehrere Einträge auswählen.

Der Eintrag kann z.B. SCW04P-T7 heißen. In dieser Organisationseinheit stehen dann alle Rechner vom Standort P, Bereich T7.
SCW04P-T8 ist dann der gleiche Standort aber der Bereich T8.

Sprich wird nur SCW04P-T7 ausgewählt sollten auch NUR die Rechner betrachtet werden die der OU zugeordnet sind.
Somit muss in der Auswahlliste dann der Subbereich direkt ausgewählt sein.

Will man beide haben müssen beide ausgewählt werden.

Gruß
Bitte warten ..
Mitglied: ice.polar
13.09.2016 um 15:51 Uhr
Hi
und was steht denn da in @parameter_OU wenn "...beide ausgewählt werden..."?
Bitte warten ..
Mitglied: H41mSh1C0R
13.09.2016 um 16:17 Uhr
Hi,

bei allen multiselectfeldern steht dann Wert1,Wert2,Wert3 usw.. Also mit Komma getrennt.
Kann es sein das ggf. zwei ',' fehlen?

Gruß
Bitte warten ..
Mitglied: H41mSh1C0R
14.09.2016 um 11:25 Uhr
Danke auch dir.

in der Spalte stehen z.B. "Köln, Frankfurt, Berlin, München, Bern"

01.
and [OU] like '%Köln, Frankfurt, Berlin%'
liefert die Schnittmenge bei der die 3 Standorte als Teilstring so vorkommen.

Wählt nun einer "Köln, Berlin, Bern" aus bekommt er nichts zurück da er diesen Teilstring nicht findet.

Steh grad sehr auf dem Schlauch wie ich ihm mitteile das er für jede einzelne Auswahl die Clients hinzufügen soll in die Ergebnismenge.

;(
Bitte warten ..
Mitglied: ice.polar
15.09.2016 um 11:36 Uhr
Hi

... und wählt einer "Köln, Berlin, Frankfurt" klappts auch nicht (andere Reihenfolge)...

Ich versteh's noch nicht ganz: hat es in der Tabelle v_PatchMan in der Spalte OU immer exakt eine OU (z.B. 'Berlin') oder stehen da schon alle möglichen (z.B. Köln, Berlin, Bern)? Ist die Reihenfolge da festgelegt oder könnte dann auch Köln, Bern, Berlin stehen?

Im Parameter @parameter_OU soll ja eben eine Auswahl an OU's zur Verarbeitung angegeben werden (z.B. Köln, Frankfurt, Berlin).

Dabei entsteht ein schöner Vergleich (n:n) zwischen v_PatchMan.ou und @parameter_OU.
Bitte warten ..
Mitglied: H41mSh1C0R
15.09.2016, aktualisiert um 12:14 Uhr
Hi,

In dem OU Feld steht der pfad bis zur OU drinnen.

Beispiel: Berlin,Brandenburg,Deutschland

Der Eintrag existiert pro Patch pro Rechner.

Wenn man nun nach OU filtert, sollten alle Einträge im Select bleiben die innerhalb existieren.
Sind mehrere OUs ausgewählt kommen die Einträge aus der anderen OU hinzu.

In der Parameterliste(Checkbox) für die OU sind z.B. die Städte alle gelistet und man kann die Städte auswählen.

Ich sitze gerade dran wie ich den Eintrag zerlegt bekomme und in einer Schleife die ausgewählten Parameter abgleiche.
Bitte warten ..
Mitglied: ice.polar
15.09.2016 um 15:23 Uhr
Hi,

Ich versteh' so langsam. In der Datenbank-Tabelle ist pro Datensatz eine einzige OU (inkl.Pfad, daher die Selektion mit Like).
In der Parameterliste (@Parameter_OU) kriegst Du eine Komma-separierte Liste: Eigentlich eine lange Zeichenkette.

Falls diese alle eine fixe Länge hätten, könnte man das direkt in SQL lösen. Fixe Länge bedeutet dass immer z.B. 20 Zeichen zwischen den Kommas sind ("Berlin ,Dortmund ,Ravensburg ").

Andernfalls ist eine procedurale Schlaufe ein Lösungsweg.
Bitte warten ..
Mitglied: em-pie
LÖSUNG 15.09.2016 um 15:40 Uhr
Jetzt wird es auch für mich etwas transparenter

Habe gerade mal kurz gegoogelt und diesen Post (in einem anderen Forum) gefunden:
http://stackoverflow.com/questions/5493510/turning-a-comma-separated-st ...

Hier will der TO zwar das Problem lösen, dass er in einem Feld einer Bestandstabelle kommaseparierte Werte hat, aber das müsste sicherlich auch für dein @parameter_OU genauso funktionieren.

Schaue dir insbesondere mal den Post von Jayvee (ca. Anfang der 2. Hälfte) an.

Bilde vor deinem eigentlichen Statement eine temporäre Tabelle, welche alle relevanten Daten beinhaltet, und zwar nicht mehr kommasepariert und dann joinst du die mit deinem eigentlichen Statement.
Abschließend die Tabelle wieder leeren/ plattmachen.

Stichwort hier: Table Variable:
https://msdn.microsoft.com/de-de/library/ms175010.aspx

Habe das alles selbst aber nicht getestet noch nie verwenden müssen ;)
Bitte warten ..
Mitglied: H41mSh1C0R
15.09.2016 um 16:16 Uhr
Trotzdem schonmal danke euch beiden. Ich schau mir das morgen früh an.

*mir glüht der Kopf, da geht nix mehr*

=)
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Powershell + SQL Statement
gelöst Frage von mschaedler1982Batch & Shell5 Kommentare

Hallo zusammen, Ich sitze hier gerade vor einem Problem, wo ich nicht so recht weiterkomme und im Internet habe ...

Datenbanken

SQL Statement - Select TOP x - Variables Filterkriterium

Frage von Blu3Scr33nDatenbanken3 Kommentare

Hallo liebe Administratoren, ich baue mir grade eine kleine Access-DB zusammen und bin dabei auf ein Problem gestoßen: Ich ...

Datenbanken

SQL-Statement in Excel .dqy Query - (Zeitrahmen) funktioniert nicht ?

gelöst Frage von SchelinhoDatenbanken6 Kommentare

Hallo zusammen, folgendes Thema: ich habe ein SQL-Statement mit Variablen Usereingaben, welches im PL/SQL-Developer auch tadellos funktioniert. Die Variable ...

Batch & Shell

Powershell Problem IF Statement

gelöst Frage von copybyteBatch & Shell3 Kommentare

Hallo liebe Admins, ich bin neu in Powershell eingertiegen und habe mit Hilfe und Beispielen schon Einiges gebaut. Jetzt ...

Neue Wissensbeiträge
Off Topic
Europawahl 2019 - Ein Statement der Jugend
Information von Frank vor 1 TagOff Topic16 Kommentare

Dies ist ein offener Brief. Ein Statement. Von einem großen Teil der Youtuber-Szene. Am Wochenende sind die EU-Wahlen und ...

Off Topic
Europawahl 2019
Information von Frank vor 2 TagenOff Topic44 Kommentare

Vom 23. bis 26. Mai 2019 findet die Europawahl in den Mitgliedstaaten der Europäischen Union statt (ja auch in ...

Humor (lol)

Minister wollen offenbar Ausweispflicht für .de-Domain

Information von Kraemer vor 2 TagenHumor (lol)7 Kommentare

Zitat von Golem.de: Die zuständigen Verbraucherschutzminister fordern einem Medienbericht zufolge offenbar eine Ausweispflicht für .de-Domains. Das soll Betrugsfälle mit ...

Off Topic
Was als Noob hier mal gesagt werden musste
Information von th30ther vor 4 TagenOff Topic5 Kommentare

Moinsen wertes Forum, ich möchte mich an dieser Stelle mal beim Forum generell und bei aqui speziell bedanken! Ich ...

Heiß diskutierte Inhalte
Router & Routing
ZyXEL ZyWALL USG 20 Routing
Frage von Oggy01Router & Routing27 Kommentare

Hallo, und wieder habe ich ein Problem mit dem Routing. Bis vor ein paar Tagen habe ich das mit ...

Off Topic
Europawahl 2019 - Ein Statement der Jugend
Information von FrankOff Topic14 Kommentare

Dies ist ein offener Brief. Ein Statement. Von einem großen Teil der Youtuber-Szene. Am Wochenende sind die EU-Wahlen und ...

LAN, WAN, Wireless
Welches Material ist das Richtige?
Frage von Motte990LAN, WAN, Wireless12 Kommentare

Guten Morgen Leute, ich bin aktuell damit beschäftigt in unserm neu gekauften Haus das Netzwerk einzubauen. Aktuell wurden bis ...

Router & Routing
2 Server über VPN (3. Netz) verbinden mit iptables
Frage von samsillaRouter & Routing8 Kommentare

Hallo, mein Ziel ist, zwei Netzwerke (192.168.0.X und 192.168.2.X) über ein VPN (10.8.0.X) zu verbinden. Folgender Netzwerkaufbau ist gegeben: ...