Jump to content

PeterWa

Members
  • Gesamte Inhalte

    9
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von PeterWa

  1. Hallo!

    Mein System:

    SQL Server 2019 Express

    Management Studio 19,02

    Ich habe von Access 365 eine Datenbank migriert.

    Wenn ich Tabellen in das Management Studio einfügen möchte dann gibt es Probleme.

    zB. 

    Die Tabelle tblAngebot = OK

    Bei der Tabelle tblAngebotDeteil verabschiedet sich das Management Studio ohne Meldung, und startet wider neu.

    Das selbe Problem bei Auftrag, Lieferschein u. Rechnung.

    In der DB von AC standen diese Tabellen alle in 1:n Beziehung

    Wo habe ich den Fehler?

    Besten Dank für eine Tipp im voraus!

    mfg

    Peter 
     

  2. Hallo Nils!

    Zuerst besten Dank für deine Antwort.

    Was möchte ich damit bezwecken:

    Es Werden für einen Kunden Lieferscheine Erstellt.

    Es wird dann eine Lieferscheinrechnung erstellt.

    Bei der Erstellung der Lieferscheinrechnung werden die beiden Nummern in einer

    Tabelle gespeichert => dbo.tblRGLF.

    Damit der Kunde weiß wie viele Lieferscheine in dieser Rechnung verpackt sind,

    gibt es ein Feld "Lieferscheine" und da werden die Lieferscheine aufgezählt 

    zB.  15, 20,25 usw.

    Das sollte die Procedur erledigen.

     

    mfg

    Peter

     

     

  3. Hallo und guten Morgen!

    Ich plage mich schon etwas länger mit einer Schleife ab. Die im Grunde funktioniert. Nur das Ergebniss ist leider nicht das was ich mir erwarte.

    In einer Tabelle werden alle Lieferscheine die zur Rechnung gehören gespeichert.

    Es sollen die Lieferscheine wie folgt angezeigt werden: 18, 19, 20 usw.

    Bei meiner Anwendung werden sie im Tabellenvormat angezeift. Im nachfolgender Prozedur ist die Print Anweisung

    nur Zum Test. im Normalfall steht dort eine Update Anweisung.

    Wie ich schon erwähnt habe die Schleife selbst ist das Problem nicht,

    Nur bei der Übergabe auf die Variable @Lieferschein gibt es ein Problem.

    Ich währe für einen Tipp Dankbar! 

     

     mfg

    Peter

    ALTER PROC [dbo].[spRechnungLFNr]
    		@RgNummer int
    
    as
    set nocount ON;
    	DECLARE @LieferscheinNr int;
    	DECLARE @Lieferschein VARCHAR(255);
    	DECLARE curLieferscheinNr CURSOR
    
    	FOR SELECT LieferscheinNr From dbo.tblRGLF Where rechnungnr=@Rgnummer
    	OPEN curLieferscheinNr;
    	FETCH NEXT FROM curLieferscheinNr INTO @LieferscheinNr;
    	WHILE @@FETCH_STATUS = 0
    	BEGIN
    	set @Lieferschein = @LieferscheinNr;  
    	set @Lieferschein = @Lieferschein +','+ @LieferscheinNr;
    	Print @Lieferschein
    	FETCH NEXT FROM curLieferscheinNr INTO @LieferscheinNr
    	END
    
    	CLOSE curLieferscheinNr
    	DEALLOCATE curLieferscheinNr
    

     

     

    Wie ich schon erwähnt habe die Schleife selbst ist das Problem nicht,

    Nur bei der Übergabe auf die Variable @Lieferschein gibt es ein Problem.

    Ich währe für einen Tipp Dankbar! 

     

     mfg

    Peter

  4. Hallo!

    Ich sende die komplette Procedur.

    Nochmals die Function:

    Wenn Adresse und Rabattgruppe in @Kunden vorhanden, dann soll der Rabatt von @Kunde genommen werden. 

    zB: '0007',3 Diese sind vorhanden und werden auch Übernommen

    Wenn aber statt der 3 eine 4, Dieser Kunde ist in der tblKundenrabatt nicht vorhanden. Er bekommt den @Special Rabatt

    Wenn ich die Proc ausführe und mit

    Print @Kunde und

    Print @Special konntroliere und @Kunde ist False ist das auch leer. 

    Ich habe mich mit einer Unterabfrage abgemüht, wenn @Kunde ohne Ergebniss ist, eine 0 angezeigt wird, da bin ich aber an der Erstellung gescheitert

     

    Ich hoffe das ich jetzt alles richtig erklärt habe.

     

    mfg

    Peter

    ALTER Procedure [dbo].[spRabatt]
    @Rabattgruppe varchar(25),
    @Adresse Int,
    @Rabatt real Output
    AS
    
    Declare @Special as real
    Declare @Kunde as real
    
    Begin
    SET @Special = (SELECT Spezial
    FROM dbo.tblRabattgruppe
    WHERE Rabattgruppe =  @Rabattgruppe);
    
    Set @Kunde = (Select 
    Kundenrabatt
    FROM dbo.tblKundenRabatt
    WHERE Rabattgruppe = @Rabattgruppe
    And Kundenadresse = @Adresse);
    SET @Rabatt = @Kunde
    End

     

  5. Hallo!

    Mein Ziel:

    Es gibt in dieser Procedur 2 Abfragen die eine oben und eine die nur den Allgemeinen  Rabatt  beinhaltet. Wenn also die 1. Abfrage leer ist, dann wird die 2. Abfrage aktiv.

    Der Aufruf der Prc :

    @Rabattgruppe  

    @Adresse 

    @Rabatt steht für den Rückgabewert der Proc.

     

    Die Variableen

    @Kunde  steht für die 1. Abfrage

    @Special steht für die 2. Abfrage

     

    Es sollte ungefähr so wie unten beschreiben klappen 

    Ich stelle mir das zumindest so vor (vielleicht ein bischen Blauäugig?)

     

    if @Kunde = null

    SET @Rabatt = @Spcial  -- Name der 2. Abfrage

    else

    SET @Rabatt =@Kunde

     

    mfg

    Peter

     

  6. Hallo und guten Morgen

     

    Bevor ich mein Problem erkläre möchte ich festhalten das dies meine ersten Schritte in SQL Server sind.

    Nun zur meiner Frage:: Wie behandelt man einen leeren Datensatz, Um es genauer zu sagen Wenn bei nachstehnder Abfrage kein Ergebniss vorhanden ist.

    wenn also bei nachstehender abfrage kein Wert vorhanden ist.

     

    Set @Kunde = (Select 
    Kundenrabatt
    FROM dbo.tblKundenRabatt
    WheRE Rabattgruppe = @Rabattgruppe
    And Kundenadresse=@Adresse)

     

    Meine Versuche mit @Kunde is null oder @kunde = 0
    Brachten mich leider nicht weiter,

     

    Besten dank für einen tipp im voraus!

     

    mfg

    Peter

     

  7. Hallo und Guten Morgen!

    Ich sollte meine Frage eigentlich anders stellen:

    Wie kann ich einer Variablen einen Standartwert zuweisen.

    Beim Aufruf mit Exec ist der Wert in @Betrag von und @Betragbis 0

    Das der Filter nicht funktionieren kann ist wohl klar

    ........

    Rechnungspreis Between @BetragVon and @BetragBis, and
    ......

    Der Wert der Variablen @Betragbis sollte zB. "999999" sein

     

    SQL Server ist halt nicht VBA.

    Meine Versuche mit If und Case brachten leider auch nicht den gewünschten Erfolg.

    LG

    Peter

     

  8. Hallo und Guten Tag!

    Zuerst einmal ich bin neu im Forum. Ich habe mich bis jetzt mit Access "gespielt" und habe mir in den Kopf gesetzt meine Anwendung in SQL Server zu migrieren.

    Mein Thema Probleme mit Where ist vielleicht nicht ganz treffend.

    Ich versuche es aber trotzdem.

    Ich erstelle derzeit ein Formular Rechnungen suchen.Die Procedur:
     

    ALTER Proc [dbo].[spSuchenRechnung]
    @Kunde varchar(50) = 0,
    @Strasse Varchar(50) = 0,
    @PLZ varchar(10) = 0,
    @Ort varchar(50) = 0,
    @DatumVon date = Null, 
    @DatumBis date = Null,
    @RgBetragVon Money = 0,
    @RgBetragBis Money = 0,
    @RGvon int = 0,
    @RgBis int = 0
    
    
    AS
    SELECT  *
    FROM 
    dbo.tblRechnung LEFT JOIN dbo.tblKundenAdressen ON dbo.tblRechnung.Kundennummer = dbo.tblKundenAdressen.Adressnummer
    WHERE
    (CONCAT (Adresszeile_2, Adresszeile_1) LIKE @Kunde +'%') and -- or @Kunde + '%' is null)  AND
    Strasse LIKE @Strasse +'%' and -- Or @Strasse is null  AND 
    PLZ LIKE @PLZ +'%' and --or @PLZ +'%' is null and
    Ort LIKE @Ort +'%' and ---or @ort +'%' is null and
    Rechnungsdatum Between @Datumvon and @Datumbis And
    Rechnungspreis Between @RgBetragVon and @RgBetragBis and
    Rechnungsnummer Between @rgvon And  @rgbis
    ORDER BY dbo.tblRechnung.Rechnungsnummer, CONCAT (Adresszeile_2, Adresszeile_1);


     

    Zu meiner Frage:

    Ist es möglich in einer Where Bedingung eine Case function einzubauen?

    Wenn ich der Rechnungsnummer 0 (Null) übergebe dann sollen alle DS angezeibgt werden

    ansonsten die angegebene Nr

    Etwa so:

    Case @rgvon
    WHEN  = 0 Then Rechnungsnummer > 0
    When  <> 0 Then Rechnungsnummer =@rgvon

    Ich müsste bei der RgNr nicht 2 Werte übergeben.

     

    Ich hoffe das ich mein Problem verständlich dargestellt habe.

     

    mfg

    Peter und schöne grüße aus Wien

     

     

     

     

×
×
  • Neu erstellen...