Вопрос по c#, sql-server – Использование CTE на SQL Server Compact 3.5

2

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

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

There was an error parsing the query. [ Token line number = 1,Token line offset = 1,Token in error = 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?

Ваш Ответ

4   ответа
1

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

alt text

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

1

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

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

Похожие вопросы