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
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