2009-06-29 8 views
2

Ceci est mon premier post sur stackoverflow, j'espère que c'est l'un des nombreux!Utilisation de CTE sur SQL Server Compact 3.5

Ma question est la suivante: J'utilise CTE dans une requête pour détecter et supprimer des enregistrements en double dans une table. Cette requête fonctionne très bien dans SQL Server 2005/2008, mais dans Compact, elle génère une exception:

Une erreur s'est produite lors de l'analyse de la requête. [numéro de ligne jeton = 1, ligne Token offset = 1, jeton erreur = WITH]

Voici ma requête:

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(); 

Suis-je manque quelque chose, ou ne CTE fonctionne pas sur SQL Server Compact?

Répondre

1

Vous pouvez probablement imbriquer la requête, quelque chose comme ça (peut avoir des problèmes de syntaxe):

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

Certaines choses ne sont pas supportées par la version mobile CTE et les processus de stockage par exemple ne fonctionneront pas sur la version mobile. Vous pouvez utiliser la version express qui est également gratuit

1

une preuve quant à savoir si le sous-ensemble de TSQL SQL Compact 3.5 peut utiliser des expressions courantes Tableau:

alt text

Testé avec Visual Studio 2010 et un nouveau fichier SQL Compact .sdf.

Questions connexes