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

您在子查询之后、分组依据之前放置了提示。

它应该看起来像这样:

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 回答