Ostatnio zostałem poproszony o pomoc przy rozwiązaniu problemu - kod który powinien działać - wbrew logice działać nie chciał (brzmi znajomo, prawda?). Otóż w pliku *.sdf (Sql Server Compact) była tabla:

Jeśli odwołać się do tej tabeli poprzez, np:
SELECT * FROM Clients
SELECT * FROM dbo.Clients
SELECT * FROM [dbo].[Clients]
Otrzymamy błąd mówiący, że tabela Clients nie istnieje. Na pierwszy rzut oka może się wydawać dziwne - zapytania są poprawne, więc co jest źle? Otóż, jesteśmy przyzwyczajeni do skryptów generowanych przez Sql Server i składnia [dbo].[nazwa_tabeli] jest jak najbardziej naturalna. Jednak należy pamiętać, że Sql Compact rządzi się trochę innymi prawami i nie posiada mechanizmów do obsługi uprawnień. W tym przypadku nasza tabela nie nazywa się Clients tylko dokładnie dbo.Clients. Aby odwołać się do tej tabeli musimy jej nazwę ująć w nawiasy kwadratowe:
SELECT * FROM [dbo.Clients]
Trochę jednak dziwi mnie, że zapytanie:
SELECT * FROM dbo.Clients
również nie działa i generuje wyjątek.
Inną sprawą jest również jak można było utworzyć taką nazwę tabeli, gdyż nawet jeśli najpierw stworzymy sobie strukturę bazy na Sql Serverze wygenerujemy skrypt i wykonamy go na bazie *.sdf - Visual Studio poinformuje nas o błędnej nazwie tabeli. Pozostaje wiec nam, chyba, tylko wklepanie tej nazwy ręcznie - cóż za nieuwagę się płaci.