Umstieg zu MSSQL Expertenfragen

OLAFK

Neuer Benutzer
Beiträge
3
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
 
Werbung:
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...
 
Werbung:
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.
 
Zurück
Oben