1

何らかの理由で、OPTIONを追加するための構文を正しく取得できません

   Database db = DatabaseFactory.CreateDatabase(Config.DbConnectionString);

    using (DbCommand cmd = db.GetSqlStringCommand(string.Format(@"  SELECT  t.customerID,
                                                                            t.Photo
                                                                    FROM SomeTable t
                                                                    WHERE t.PhotoID = (SELECT MAX(PhotoID) FROM SomeTable WHERE customerID = @{0} OPTION (OPTIMIZE FOR UNKNOWN)
                                                                    GROUP BY CustomerID ) ", "customerID")))
    {
        try
        {
            db.AddInParameter(cmd, "@customerID", DbType.String, customerID);
4

1 に答える 1

3

サブクエリの後、group by の前にヒントを配置します。

次のようになります。

SELECT t.customerID,
       t.Photo
FROM SomeTable t
WHERE t.PhotoID = (
                     SELECT MAX(PhotoID) 
                     FROM SomeTable 
                     WHERE customerID = @{0}
                  )
GROUP BY CustomerID
OPTION (OPTIMIZE FOR UNKNOWN)

混乱の原因は、ヒントがパラメーター値に関係しているため、パラメーターの直後に配置する必要があると考えたからかもしれません。ただし、OPTION 常にクエリヒントが導入されます。おそらく、これを念頭に置いておくと、正しい構文を覚えるのに役立ちます。つまり、OPTION常にクエリ全体の最後に置く必要があります。

于 2012-11-08T16:27:28.220 に答える