AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken C# Interbase/Firebird vs. MS-SQL Server 2005: Unterschiede?
Thema durchsuchen
Ansicht
Themen-Optionen

Interbase/Firebird vs. MS-SQL Server 2005: Unterschiede?

Ein Thema von Jürgen Thomas · begonnen am 27. Aug 2006 · letzter Beitrag vom 29. Aug 2006
Antwort Antwort
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#1

Interbase/Firebird vs. MS-SQL Server 2005: Unterschiede?

  Alt 27. Aug 2006, 17:59
Datenbank: Interbase • Version: 7.5 • Zugriff über: BdpProvider
Hallo,

unabhängig von meiner noch laufenden Diskussion habe ich einige konkrete Fragen zum SQL Server 2005 (bisher hatte ich mich mit Interbase befasst). Die Fragen formuliere ich so, dass Interbase-DBs zu MSSQL-DBs konvertiert werden sollten. Ich bitte auch um Aussagen, was bei Firebird angebracht wäre.

(Nachtrag:) Bei MSSQL habe ich die Doku und z.T. die Lernprogramme benutzt, aber noch keine ernsthaften Versuche gemacht.

@Mods
Da es sich weitgehend um kurze und klare Fragen handelt, die ohne längere Diskussion beantwortet werden könnten, dürfte es erlaubt sein, hier mehrere Themen zusammenzufassen.

SQL-Skripts: COMMIT (WORK), SET TERM, GO
Sehe ich es richtig, dass die ersten beiden Befehle praktisch durch GO zu ersetzen wären?

Datentyp BOOLEAN
Diesen gibt es in IB ja inzwischen (jedenfalls rudimentär; beim Aufruf von SProc muss oft noch ein int-Wert 0/1 übergeben werden). Muss man bei MSSQL weiterhin mit int arbeiten? Welcher int-Typ ist bei der internen Arbeitsweise von MSSQL am besten geeignet? Ist es sinnvoll, dafür einen Benutzer-Typ zu definieren, oder wird besser mit dem eigentlichen int-Typen gearbeitet?

Benutzerdefinierte Datentypen und Domains
IB setzt bekanntlich jede Spaltendefinition in Domains um; auch deshalb empfiehlt es sich (empfiehlt Andreas Kosch), für alles Domains zu definieren. Unter MSSQL gibt es Domains anscheinend nicht im Zusammenhang mit Datentypen (oder habe ich etwas Wichtiges übersehen?). Gibt es für MSSQL vergleichbare Arbeitsweisen, oder legt man benutzerdefinierte Datentypen nur bei Bedarf an (z.B. weil eine deutsche PLZ immer 5 Stellen (Nachtrag: nämlich Ziffern) und ein Nachname immer max. 35 Stellen haben soll)?

Danke erst einmal! Jürgen

[edit=Jelly]Einige Sachen auf Wunsch gelöscht, Mfg, Jelly[/edit]
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Interbase/Firebird vs. MS-SQL Server 2005: Unterschiede?

  Alt 27. Aug 2006, 18:17
Eine Grundsatzfrage:

Willst du nur nach MS-SQL portieren und dann wieder einen Vendor Lock-In haben oder soll deine Anwendung mal DBMS-Unabhängig sein?

Falls du DBMS-Unabhängig sein willst so bau dir auf jedenfall eine DBMS-Abstraktionsschicht ein (wie z.B (N)Hypernate oder konsorten). Dies sollen auch unteschiede der Datentypen kapseln.
Auch ist es sinnvoll möglichst wenige spezielle DB-Datentypen zu verwenden um hier nicht probleme mit der Unterstüzung in anderen DB's zu haben.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Interbase/Firebird vs. MS-SQL Server 2005: Unterschiede?

  Alt 27. Aug 2006, 18:28
Zitat von Jürgen Thomas:
SQL-Skripts: COMMIT (WORK), SET TERM, GO
Sehe ich es richtig, dass die ersten beiden Befehle praktisch durch GO zu ersetzen wären?
Zitat von Onlinedokumentation:
Die Dienstprogramme von SQL Server interpretieren GO als Signal dafür, dass der aktuelle Stapel von Transact-SQL-Anweisungen an SQL Server gesendet werden soll. Der aktuelle Anweisungsstapel besteht aus allen Anweisungen, die seit dem vorigen GO eingegeben wurden; falls dies das erste GO ist, besteht er aus allen Anweisungen, die seit dem Beginn der Ad-Hoc-Sitzung oder des Skripts eingegeben wurden. SQL Server Query Analyzer und die Befehlszeilendienstprogramme osql und isql implementieren GO unterschiedlich.
Zitat von Jürgen Thomas:
Datentyp BOOLEAN
Bei MSSQL gibts den Datentype bit, der von Delphi als Boolean genutzt werden kann.
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Interbase/Firebird vs. MS-SQL Server 2005: Unterschiede?

  Alt 29. Aug 2006, 09:21
Hinweis: Bei MSSQL habe ich die Doku und z.T. die Lernprogramme benutzt, aber noch keine ernsthaften Versuche gemacht.

Danke für diese Antworten.
Weitere Fragen als Nachtrag

Autoinc / Gen_ID / Identity
Einen Autoinc-Datentyp gibt es weder in IB noch in MSSQL. In IB kann dieser durch Gen_ID i.V.m. Generatoren ersetzt werden. Sehe ich es richtig, dass Identity ein besserer, nämlich automatischer Ersatz ist? Sehe ich es richtig, dass ein Identity-Feld zusätzlich als PrimaryKey festgelegt werden muss (und dies nicht automatisch ist)?

Trigger before / Trigger instead of
Kann ich als schnelle Lösung einen 'Trigger instead of' anstelle eines 'Trigger before' verwenden, oder gibt es wesentliche Unterschiede? (Im zweiten Fall genügt mir zz. ein kurzer Hinweis, keine lange Erläuterung; ich werde ggf. selbst weitersuchen.)

Danke weiterhin! Jürgen

PS. Nachträge werden anscheinend übersehen; ich setze diese Punkte deshalb nochmals rein.
@Mod
Ich wollte diese Fragen in #1 löschen, durfte das aber nicht mehr machen.
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Interbase/Firebird vs. MS-SQL Server 2005: Unterschiede?

  Alt 29. Aug 2006, 09:36
Zitat von Jürgen Thomas:
Autoinc / Gen_ID / Identity
Einen Autoinc-Datentyp gibt es weder in IB noch in MSSQL.
FürIB/FB stimmt das, da läufts über Generatoren.
Für MSSQL geht das ganz leicht mit dem Zusatz identity bei der Definition einer Spalte. Etwa so:
SQL-Code:
CREATE TABLE Test (
   ID int IDENTITY (1, 1) NOT NULL ,
   Name varchar(100) NULL
)
GO

ALTER TABLE Test WITH NOCHECK ADD
   CONSTRAINT PK_ID PRIMARY KEY CLUSTERED
   (ID)
GO
Du kannst auch die Sache mit dem Primary Key weglassen, aber dazu gibts meist keinen Grund. Jede gute Tabelle sollte mindestens einen Primary Key definiert haben.

Zitat von Jürgen Thomas:
Trigger before / Trigger instead of
Was verstehst Du unter einem "Trigger instead of"
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#6

Re: Interbase/Firebird vs. MS-SQL Server 2005: Unterschiede?

  Alt 29. Aug 2006, 10:27
Autoinc:
Zitat von Jelly:
Für MSSQL geht das ganz leicht mit dem Zusatz identity bei der Definition einer Spalte.
So hatte ich es auch verstanden; es ging mir um die Bestätigung, dass ich richtig liege.

Zitat von Jelly:
Was verstehst Du unter einem "Trigger instead of" :gruebel:
Das hier aus der SQL-Doku unter CREATE TRIGGER (Transact-SQL):
Zitat:
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table | view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
// usw.
INSTEAD OF
Gibt an, dass der DML-Trigger anstelle der auslösenden SQL-Anweisung ausgeführt wird, wodurch die Aktionen der auslösenden Anweisungen außer Kraft gesetzt werden. INSTEAD OF kann für DDL-Trigger nicht angegeben werden.
Diese Beschreibung deutet darauf hin, dass sich ein IB-Trigger Before wesentlich von dieser Art Trigger unterscheidet. Meine Frage zielt darauf, ob ich ggf. als schnelle Lösung dies als Ersatz nutzen kann.

Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Interbase/Firebird vs. MS-SQL Server 2005: Unterschiede?

  Alt 29. Aug 2006, 10:34
Dieser instead of Trigger ist dann aber beim SQL Server 2005 neu. Bei der 2000er Version gibts das noch nicht, nur die üblich Verdächtigen for insert, update, delete.
  Mit Zitat antworten Zitat
Dirk_B

Registriert seit: 15. Aug 2006
36 Beiträge
 
#8

Re: Interbase/Firebird vs. MS-SQL Server 2005: Unterschiede?

  Alt 29. Aug 2006, 18:44
Zitat von Jürgen Thomas:
Gibt an, dass der DML-Trigger anstelle der auslösenden SQL-Anweisung ausgeführt wird, wodurch die Aktionen der auslösenden Anweisungen außer Kraft gesetzt werden. INSTEAD OF kann für DDL-Trigger nicht angegeben werden
Diese Beschreibung deutet darauf hin, dass sich ein IB-Trigger Before wesentlich von dieser Art Trigger unterscheidet. Meine Frage zielt darauf, ob ich ggf. als schnelle Lösung dies als Ersatz nutzen kann.

Jürgen
Kein Ersatz, völlig andere Arbeitsweise.

ME werden Trigger bei Aktion ausgeführt, Bsp. : BeforeInsert, Insert, AfterInsert

Ich denke, Die instead-Trigger ersetzen den Befehl! Also kein Insert mehr!

Vorteil: vollständige Handlungsfreiheit
Nachteil: nicht kaskadierbar! nicht mit BeforeInsert/AfterInsert kombinierbar.

Mfg

DB
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz