tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Alex F.
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
726
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kspiel kspiel ist offline Mitglied
    Registriert seit
    Feb 2010
    Beiträge
    10
    Hallo @ all,

    bin ein SQL-Einsteiger und stoße grad auf ein Problem, bei dem ihr mir 100% helfen könnt.
    Und zwar habe ich eine SP mit der ich eine Suche auf eine Tabelle ausführen möchte und das mit mehreren Werten,
    wobei die Anzahl der Werte variiert.

    z.B: mit Werten
    @A
    @B
    @C
    @D

    Wenn kein wert übergeben wurde, dann wird dieser auf NULL gesetzt

    @A AND @B AND @C AND @D -> geht ja nicht da nicht ale werte immer vorhanden sind

    Nun meine Frage: Wie schreibe ich dasmit besten performance in einer SP?

    Gruß,
    kspiel
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Mehrere DBMS bieten Stored Procedures an. Um Welche handelt es sich? Oracle? MS SQL? sonstwas?
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    kspiel kspiel ist offline Mitglied
    Registriert seit
    Feb 2010
    Beiträge
    10
    MS SQL is es
     

  4. #4
    Avatar von Alex F.
    Alex F. Alex F. ist offline Mitglied Smaragd
    Registriert seit
    Jul 2004
    Beiträge
    1.034
    Code :
    1
    
    Create Procedure MeineProc( @a varchar(50) =null, @b varchar(50)=null, @c varchar(50)=null ....)

    Grüsse bb
     
    Don't get set into one form, adapt it and build your own, and let it grow, be like water. .... Now, water can flow or it can crash. Be water, my friend.

  5. #5
    kspiel kspiel ist offline Mitglied
    Registriert seit
    Feb 2010
    Beiträge
    10
    Danke für die Antwort, aber mir geht es nicht um das deklarieren der Variablen, sondern mehr um den zu erstellenden Vergleich der SP.

    Zitat Zitat von kspiel Beitrag anzeigen

    @A AND @B AND @C AND @D -> geht ja nicht da nicht ale werte immer vorhanden sind
    l
    Wie schreibe ich diese vernünftig um die den Fall abzudecken, dass ich einmal 2 Werte übergebe und einmal z.B. alle.

    Ich habe erstmal es so geschaft:

    Code :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    CREATE PROCEDURE [dbo].[spTest]
    (
        @A varchar,
        @B varchar,
        @C varchar,
        @D varchar
    )
    AS
     
    DECLARE @Befehl varchar(4000)
     
    SELECT @Befehl =    'SELECT Spalte A, Spalte B, Spalte C
                        FROM tblTest'
     
    SELECT @Befehl = @Befehl + ' WHERE'
     
     
    IF @A IS NOT NULL
    BEGIN
    SELECT @Befehl = @Befehl + 'blabla'
    END
     
     
    IF @B IS NOT NULL
    BEGIN
    SELECT @Befehl = @Befehl +  'blabla'
    END
     
    IF @C IS NOT NULL
    BEGIN
    SELECT @Befehl = @Befehl + 'blabla'
    END
     
     
    IF @C IS NOT NULL
    BEGIN
    SELECT @Befehl = @Befehl + 'blabla'
    END
     
    EXEC(@Befehl)

    So hatte ich den String zusammengebaut und ausgeführt, aber ist ja nicht das klugste was man machen kann oder?
    Wie kann man das anders/besser, ohne solch einen String zu bauen, machen?
    Hoffe ihr versteht mein anliegen.

    Gruß,
    kspiel
     

  6. #6
    kspiel kspiel ist offline Mitglied
    Registriert seit
    Feb 2010
    Beiträge
    10
    niemand eine idee?
     

  7. #7
    Avatar von Alex F.
    Alex F. Alex F. ist offline Mitglied Smaragd
    Registriert seit
    Jul 2004
    Beiträge
    1.034
    Code :
    1
    2
    3
    4
    5
    6
    
     
    SELECT  Spalte A, Spalte B, Spalte C  
    FROM tblTest 
    WHERE A like ''+ ISNULL(@A,'')+'%'''
    And  B like ''+ ISNULL(@b,'')+'%'''
    And  C like ''+ ISNULL(@b,'')+'%'''

    BEM: SQLBefehle in Stored Procedures über EXEC auszuführen ist in den meisten Fällen totaler Blödsinn- der interne QueryOptimizer legt dann total unsinnige Ausführungspläne an und die Verwendung einer SP ist dann eigentlich überflüssig


    LG BB
    kspiel bedankt sich. 
    Don't get set into one form, adapt it and build your own, and let it grow, be like water. .... Now, water can flow or it can crash. Be water, my friend.

  8. #8
    kspiel kspiel ist offline Mitglied
    Registriert seit
    Feb 2010
    Beiträge
    10
    Zitat Zitat von brainbyte Beitrag anzeigen
    Code :
    1
    2
    3
    4
    5
    6
    
     
    SELECT  Spalte A, Spalte B, Spalte C  
    FROM tblTest 
    WHERE A like ''+ ISNULL(@A,'')+'%'''
    And  B like ''+ ISNULL(@b,'')+'%'''
    And  C like ''+ ISNULL(@b,'')+'%'''

    BEM: SQLBefehle in Stored Procedures über EXEC auszuführen ist in den meisten Fällen totaler Blödsinn- der interne QueryOptimizer legt dann total unsinnige Ausführungspläne an und die Verwendung einer SP ist dann eigentlich überflüssig


    LG BB
    Danke brainbyte,
    werd heut abend probieren


    Edit: wollte noch mal sagen hat super geklappt THX
    Geändert von kspiel (07.03.10 um 20:32 Uhr)
     

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 26.07.10, 19:21
  2. Online Foto Storage
    Von moskovich im Forum Fotografie & Digitalfotografie
    Antworten: 2
    Letzter Beitrag: 08.02.10, 09:27
  3. Stored Procedure mit mehreren Executes auf MS-SQL
    Von Menduso im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 11.06.08, 09:47
  4. Network Attached Storage
    Von Radhad im Forum Virtualisierung (VMWare, Virtual PC & Co.)
    Antworten: 4
    Letzter Beitrag: 15.03.07, 09:02
  5. PCI Mass Storage ?
    Von JTBKN im Forum Hardware
    Antworten: 10
    Letzter Beitrag: 26.09.02, 21:39