Thomas Teufl

Knowledgebase

Archive for the ‘Datenbank’ Category

hat Mike Gunderloy zusammengestellt. Habe ich zufällig entdeckt, dürfte für den Ein oder Anderen doch noch überraschende Neugikeiten enthalten…

Siehe hier

Access Fehler

Meldung bei Microsoft Access XP:

Microsoft Access konnte das Datenbankfenster nicht erstellen.
Bitte führen Sie ein Update auf eine neuere Version von Microsoft Internet Explorer durch.

Aha.

MS SQL 2005, MySQL und PHP-Coder

Ja, der Umstieg von MySQL auf MS SQL 2005 ist für die Internetcoder schon schwierig. Einige lieb gewonnenen Funktionen, die es in MySQL gibt, in allen anderen RDBMSen aber nicht (z.B. Paging), können einem das (Programmierer)Leben schon zur Qual machen. Aber es gibt ja genügend Datenbankframeworks, die einem diese Arbeit abnehmen.
Eines dieser vielen ist MDB2, der Nachfolger von PearDB. Dieses kleine Tool macht das Coden schon wesentlich leichter, reicht es doch, hier die MySQL-ähnliche Syntax reinzuschieben und das Framework kümmert sich um die richtige Anbindung zur entsprechenden Backend-Datenbank.

Dann klappts auch mit MS SQL.

Paging mit MS SQL 2005

Die MySQL´er kennen die Funktion LIMIT mit der sich sehr einfach ein Paging darstellen läßt. Usern von MS SQL blieben solche Funktionen bislang verwehrt. Mit umständlichen Sub-Selects und ORDER BY war es schon möglich, etwas ähnliches hinzubekommen, leider nicht sehr perfomant. Aber MS hat Abhilfe geschaffen! Mit ROW_NUMBER() und OVER gehts fast so einfach und wirklich schnell.

siehe Sebastian Weber, MSDN und hier

Update:

OVER macht es nötig, ein ORDER BY-Statement in der Klammer anzugeben. Wenn jedoch im SELECT-Statement sowieso ein ORDER BY vorkommt, wird für die Zuweisung der Zeilennummern dieses verwendet und das dem OVER zugeordnete verworfen. Ist dies so, verlangt T-SQL aber zwingend die Angabe von TOP oder FROMXML. Ein TOP 100 PERCENT löst das Problem. Das macht es in vielen Fällen einfacher, mit ROW_NUMBER() zu hantieren.

Beispiele (100 Zeilen je Seite):

Beispiel 1:

WITH Beispiel AS (
SELECT Row_Number() OVER (ORDER BY Nachname, Vorname, Alter) AS Seite,
Testtabelle.*
FROM Testtabelle
) SELECT * FROM Beispiel WHERE Seite BETWEEN 1 AND 100

Beispiel 2:

WITH Beispiel AS (
SELECT TOP 100 PERCENT Row_Number() OVER (ORDER BY TabellenID) AS Seite,
Testtabelle.*
FROM Testtabelle
ORDER BY Nachname, Vorname, Alter
) SELECT * FROM Beispiel WHERE Seite BETWEEN 1 AND 100

Beispiel 3:

SELECT TOP 100 Testtabelle.*
FROM Testtabelle
ORDER BY Nachname, Vorname, Alter

Alle drei Beispiele liefern die gleichen 100 Datensätze. Die ersten beiden aber wesentlich schneller als die dritte. In einer etwas komplexeren Abfrage erreichten wir Zeitverbesserungen von 34sec. auf knapp 10sec.

TSQL: Zahlen formatieren

Es gibt ab und zu die Notwendigkeit, Zahlen als Text mit führenden oder füllenden Zeichen zu formatieren. In VB(A) gibt es dafür den Befehl “Format”, unter T-SQL muss man sich hier schon etwas tiefer mit der Materie befassen:
SELECT REPLACE(STR(@MeineZahl,10), ' ', '0')
Rechtsbündig
----------------------
0000000099
(1 row(s) affected)

Genaueres auf InsideSQL