Использование CTE на SQL Server Compact 3.5 - PullRequest
2 голосов
/ 29 июня 2009

Это мой первый пост на stackoverflow, надеюсь, один из многих!

У меня такой вопрос: я использую CTE в запросе для обнаружения и удаления дубликатов записей в таблице. Этот запрос прекрасно работает в SQL Server 2005/2008, но в Compact он вызывает исключение:

Произошла ошибка при разборе запроса. [Номер строки токена = 1, строка токена смещение = 1, токен по ошибке = С]

Это мой запрос:

SqlCeConnection con = new SqlCeConnection(ConfigurationManager.ConnectionStrings["ADSLConnectionString"].ConnectionString);
                SqlCeCommand command = new SqlCeCommand();

                command.Connection = con;
                command.CommandType = CommandType.Text;

                command.CommandText = "WITH Dublicates_CTE(Username, accountid)" +
                                      " AS" +
                                      " (" +
                                      "     SELECT UserName,min(accountid)" +
                                      "     FROM Accounts" +
                                      "     GROUP BY username" +
                                      "     HAVING Count(*) > 1" +
                                      " )" +
                                      "     DELETE FROM Accounts" +
                                      "     WHERE accountid IN (" +
                                      "         SELECT Accounts.accountid" +
                                      "         FROM Accounts" +
                                      "         INNER JOIN Dublicates_CTE" +
                                      "         ON Accounts.Username = Dublicates_CTE.Username" +
                                      "         AND Accounts.accountid <> Dublicates_CTE.accountid" +
                                      " ) ";

                con.Open();

                command.ExecuteNonQuery();

Я что-то упустил или CTE не работает на SQL Server Compact?

Ответы [ 4 ]

1 голос
/ 27 июля 2010

Некоторые доказательства того, может ли подмножество TSQL SQL Compact 3.5 использовать общие табличные выражения:

alt text

Протестировано с Visual Studio 2010 и новым SQL Compact .sdf файлом.

1 голос
/ 29 июня 2009

Вы, вероятно, можете просто вложить запрос, что-то вроде этого (может иметь некоторые проблемы с синтаксисом):

DELETE FROM Accounts
WHERE accountid IN (
    SELECT Accounts.accountid
    FROM Accounts
    INNER JOIN (
        SELECT UserName,min(accountid) accountid
        FROM Accounts
        GROUP BY username
        HAVING Count(*) > 1
    ) Dublicates_CTE
    ON Accounts.Username = Dublicates_CTE.Username
    AND Accounts.accountid <> Dublicates_CTE.accountid
)
1 голос
/ 29 июня 2009

На будущее есть хорошая ссылка Различия между SQL Server Compact и SQL Server

1 голос
/ 29 июня 2009

некоторые вещи не поддерживаются мобильной версией CTE, и, например, хранилища не будут работать в мобильной версии. Вы можете использовать экспресс-версию, которая также бесплатна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...