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, 1164 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 ...

PHP
SQL Statement als email versenden
Frage von jensgebkenPHP21 Kommentare

Hallo Gemeinschaft, habe folgendes Problem - möchte den Inhalt eines Statements in eine Email bekommen - könnt ihr mir ...

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
Internet

(NetzDG) .und Ihr heult über Limux in München, schon gehört, was die SPD vor hat?

Information von certifiedit.net vor 19 StundenInternet7 Kommentare

Na dann, Gute Nacht Bürgerrechte. Wofür dann eigentlich die DS-GVO? Ich bezeichne mich als Polizist und hol mir einfach ...

Sicherheit

Chrome 79 übermittelt eingegebene Kennwörter nach Hause

Information von DerWoWusste vor 3 TagenSicherheit16 Kommentare

Ab sofort warnt Chrome standardmäßig Nutzer davor, wenn aus Leaks bekannte Passwörter zum Einsatz kommen. Beim Besuch einer Website, ...

Viren und Trojaner
Trend Micro WFBS 10 SP1 Patch 2185
Tipp von Abramelin vor 3 TagenViren und Trojaner3 Kommentare

Hi, Hab gerade gesehen das Patch 2185 für TM WFBS 10 SP1 erschienen ist! Werde mal Morgen den Patch ...

Viren und Trojaner

Neuer Virus lässt Windows im abgesicherten Modus starten

Tipp von transocean vor 3 TagenViren und Trojaner7 Kommentare

Moin, lest selbst. Grüße Uwe

Heiß diskutierte Inhalte
Windows 7
Windows 7 - Ein DSL Speedtest - Mehrere Browser - Unterschiedliche Ergebnisse
gelöst Frage von AusAltwirdNeuWindows 725 Kommentare

Hallo zusammen, mein PC hat zwei Rj45 Anschlüsse. Beide sind auf Gigabit Vollduplex eingestellt. An beiden Anschlüssen erreiche ich ...

LAN, WAN, Wireless
UniFi AP AC Pro wenig Durchsatz
Frage von matze2090LAN, WAN, Wireless10 Kommentare

Hallo, ich habe mir zwei UniFi AP AC Pros gekauft, da sie eine sehr gute Rezzesion haben. Ich habe ...

Festplatten, SSD, Raid
Klonen von dynamischen Laufwerk auf SSD nicht möglich
Frage von LordNicon79Festplatten, SSD, Raid8 Kommentare

Hallo zusammen, ich bin grad das erste Mal auf ein Problem gestoßen was mich ehrlich gesagt erstaunt und wo ...

DSL, VDSL
Fritz Box 7490 Internettelefonie
Frage von daveshuterDSL, VDSL8 Kommentare

Tach zusammen, ich bin gerade dabei meine neue Fritzbox (7490) für den Einsatz in meinem privaten Netz einzustellen (DSL ...