Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Umstieg zu MSSQL Expertenfragen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von OLAFK, 14 Oktober 2015.

  1. OLAFK

    OLAFK Neuer Benutzer

    Hallo liebe Gemeinde,
    ich bin mit Firebird-Datenbanken groß geworden und stelle mich jetzt der Herausforderung, mit MSSQL zu programmieren. Der Kunde ist König, einen kurzen Kurs speziell was Fragen zur Migration betrifft habe ich besucht.
    Was ich bei Firebird einfacher empfinde (man möge mich korrigieren):
    - Triggerphilosophie, old.values, new.values - bedeutend einfacher gelöst
    - Möglichkeit, Prozeduren zu implementieren, Select from Prozedure
    - Schleifen ohne aufwändige Cursor und temporären Tabellen möglich (for select... Datensatz für Datensatz wird abgearbeitet, quasi die Anweisung dahinter)
    - Möglichkeit, Prozeduren nicht nur Variablen zu übergeben

    Aber ich arrangiere mich, die Philosophien sind halt verschieden.

    Ich hätte einige spezielle Fragen an euch.

    Prozeduren: Werden Outputvarablen nicht beim Aufruf "herausgeholt", werden sie in der Prozedur auch nicht gefüllt, warum? exec Prozedur @inputvar = 11, @out1 = @output out, @out2 = @output2 out (in dem Fall werden sie geholt und intern verarbeitet. exec Prozedur @inputvar = 11, @out1 = 1, @out2 = 2 (in dem Fall werden out1 und out2 nicht intern verarbeitet, die Log-Prozeduren speichern mir keinen Wert ab!

    Aufruf Prozeduren:
    declare @pfad varchar(100);
    declare @p integer;
    exec P_MID_GET_DELPICS @dummy = '00', @pfad = @pfad out, @proz_status = @p out;
    print @pfad;
    print @p;
    - funktioniert einwandfrei

    declare @pfad varchar(100);
    declare @p integer;
    set @p = 11;
    exec P_MID_GET_DELPICS @dummy = '00', @pfad = @pfad out, @proz_status = @p out;
    print @pfad;
    print @p;
    in dem Fall bekomme ich P mit 11 zurückgegeben! Warum überschreibt der Aufruf nicht die Variable?

    Der Plan Analyser (Execution) zeigt mir an, ob z. B. ein Index sinnvollerweise einzubinden ist. Im Firebird kann ich auf ein oder mehrere Felder einen Index erstellen. Was heißt es hier (erstelle Index Feld 1, Feld 2 und die separate Anweisung: Includes Feld 3 und Feld 4 ? Was ist der Unterschied wenn ich nicht gleich alle 4 Felder dem Index zuordne?

    Und kann ich auch hier in eine Art Monitoring-Tabelle schauen ob Transaktionen nicht beendet wurden?

    Weiterhin ist mir unklar, warum beim Ausführen im Studio der Parse-Knopf scheinbar ohne tieferen Sinn ist, im IBExpert (Firebird) wird erst dann eine Aktion übernommen, wenn ich Commit betätige. Hier scheint es die Aktion direkt auszuführen?

    Danke für eure Antworten. Seid bitte gnädig mit mir ;) Habe schon so einiges ergoogelt und mich belesen, einige Fragen blieben aber unbeantwortet.

    Viele Grüße

    Olaf
     
  2. OLAFK

    OLAFK Neuer Benutzer

    Den Teil mit den Rückgabeparametern konnte ich klären, wenn man bereits die Variable vorbelegt, dann wird der Wert gleich in der Funktion übernommen. Dazu muss man diesen erst nullen. Rückgabewerte konnten im Firebird nicht zur Eingabe genutzt werden...
     
  3. OLAFK

    OLAFK Neuer Benutzer

    Beim Ausführen von MSAccess (Parameterset) wird folgendes im Profiler angezeigt, also ausgeführt:
    declare @p3 varchar(15)
    set @p3='20151002232623'
    declare @p4 int
    set @p4=2
    declare @p5 int
    set @p5=1
    exec P_APP_GET_A_KD_ID 5,1,@p3 output,@p4 output,@p5 output
    select @p3, @p4, @p5
    Warum belegt dieser die Ausgabevariablen vor? Meine Anwendung realisiert das nicht, wieso steht das Ergebnis bereits vorher in der Variable? Danke euch.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden