2009-06-29 109 views
2

這是我在stackoverflow上的第一篇文章,我希望是其中之一!在SQL Server Compact 3.5上使用CTE

我的問題是這樣的:我在查詢中使用CTE來檢測並刪除表中的重複記錄。此查詢在SQL Server 2005/2008中工作得很好,但在Compact中引發異常:

解析查詢時出錯。 [令牌行號= 1,抵消令牌線 = 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?

回答

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

有些東西不支持移動版本CTE和商店procs例如不能在移動版本上工作。你可以使用Express版本,這也是免費的

1

關於SQL精簡3.5的TSQL子集是否可以使用公用表表達式的一些證據:

alt text

使用Visual Studio 2010和新的SQL Compact .sdf文件進行測試。

相關問題