Im Folgenden habe ich zwei Varianten einer sich ziemlich ändelnden SQL Abfrage:

SELECT Top 1 Employees.Country, Employees.LastName, Employees.FirstName, Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal AS SaleAmount
FROM Employees INNER JOIN
(Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID)
ON Employees.EmployeeID = Orders.EmployeeID

and "Order Subtotals".Subtotal > 2490.50

WHERE Employees.EmployeeID > 1

SELECT Top 1 Employees.Country, Employees.LastName, Employees.FirstName, Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal AS SaleAmount
FROM Employees INNER JOIN
(Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID)
ON Employees.EmployeeID = Orders.EmployeeID
WHERE Employees.EmployeeID > 1
and "Order Subtotals".Subtotal > 2490.50

Einmal ist die Subtotal Abfrage im FROM/JOIN Bereich und einmal im WHERE. In diesem Fall liefert der SQL Server tatsächlich das gleiche Ergebnis. Nun ist mir aber bei einem Kunden folgendes passiert: In einer Kundentabelle, werden die Kundendatensätze auch noch versioniert. Es musste auf eine bestimmte Version eines Satzes zugegriffen werden und dazu wurde leider weder ein ORDER BY DESC oder ein zielgerichtetes Abfragen auf die richtige Version des Datensatzes zurückgegriffen, sondern – einfach mit TOP 1 gearbeitet. Im FROM/JOIN Bereich hatte die Abfrage alle Versionen geliefert und daher bei TOP 1 immer die älteste Version. Durch Kopieren in den WHERE Bereich war das Problem dann gelöst. Ich werde versuchen auf Basis der Northwind Datenbank dieses Phenomen nachvollziehbarer zu machen. Aber es war mir jetzt schon wichtig genug das niederzuschreiben.

Share and Enjoy:
  • Technorati
  • Digg
  • Facebook
  • del.icio.us
  • Live
  • Google Bookmarks
  • DotNetKicks
  • DZone
  • TwitThis
  • Blogosphere News
  • Blogplay
  • LinkedIn
  • MisterWong
  • MisterWong.DE
  • MSN Reporter
  • MyShare
  • RSS
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Tumblr
  • Twitter
  • Webnews.de
  • Yahoo! Bookmarks
  • Yigg

Nachdem ich nur mehr die SQL Server 2008 Tools installiert habe – gibt es Schwierigkeiten mit dem öffnen von SQLCe 3.1 Datenbanken – 2 Zeilen Code machens wieder gut. Gefunden habe ich das bei MobileTech

SqlCeEngineeng = new SqlCeEngine(@”DataSource=C:\MyDataBase.sdf”); 
eng.Upgrade(@”DataSource=C:\MyDataBaseNew.sdf”);

Share and Enjoy:
  • Technorati
  • Digg
  • Facebook
  • del.icio.us
  • Live
  • Google Bookmarks
  • DotNetKicks
  • DZone
  • TwitThis
  • Blogosphere News
  • Blogplay
  • LinkedIn
  • MisterWong
  • MisterWong.DE
  • MSN Reporter
  • MyShare
  • RSS
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Tumblr
  • Twitter
  • Webnews.de
  • Yahoo! Bookmarks
  • Yigg

Das Kommandozeilentool SqlMetal erstellt für eine gesamte Datenbank die Designerdateien für LINQ. Die generierte Codedatei kann anschlißend zur Optimierung unmittelbar im Editor nachbearbeitet werden. Bisher kannte ich nur die Projektvorlage LINQ to SQL Classes. Aber für größere DBMS ist das natürlich so viel feiner die DBML (Database Markup Language) Dateien zu erstellen.
Wunsch an meine Enterprise Architect Addin Truppe: wäre doch fein, wenn man das mit EA auch rausbekommen würde ;-)

Share and Enjoy:
  • Technorati
  • Digg
  • Facebook
  • del.icio.us
  • Live
  • Google Bookmarks
  • DotNetKicks
  • DZone
  • TwitThis
  • Blogosphere News
  • Blogplay
  • LinkedIn
  • MisterWong
  • MisterWong.DE
  • MSN Reporter
  • MyShare
  • RSS
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Tumblr
  • Twitter
  • Webnews.de
  • Yahoo! Bookmarks
  • Yigg