Использование CTE на SQL Server Compact 3.5

2

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

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

Произошла ошибка при анализе запроса. [Номер линии токена = 1, линия токена offset = 1, токен с ошибкой = WITH]

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

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?

Теги:
sql-server

4 ответа

1
Лучший ответ

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

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

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

Изображение 174551

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

1

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

1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню