SqlException (0x80131904): Строка 28: неправильный синтаксис рядом с '('.]

Пожалуйста, помогите мне! У меня есть приложение, работающее в Windows 2003 с SQL Server 2005. Когда я пытаюсь развернуть это приложение на другом сервере в Windows 2003 с SQL Server 2000, некоторые страницы приложения показывают следующее сообщение:

Server Error in '/' Application.
Line 1: Incorrect syntax near '('. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '('.

Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 


Stack Trace: 

[SqlException (0x80131904): Line 1: Incorrect syntax near '('.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1948826
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4844747
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
   System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33
   System.Data.SqlClient.SqlDataReader.get_MetaData() +83
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +297
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141
   System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12
   System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10
   System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +383

[EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.]
   System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +422
   System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context, ObjectParameterCollection parameterValues) +745
   System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +162
   System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +45
   System.Linq.Enumerable.FirstOrDefault(IEnumerable`1 source) +203
   System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1(IEnumerable`1 sequence) +40
   System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable`1 query, Expression queryRoot) +60
   System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) +109
   System.Linq.Queryable.FirstOrDefault(IQueryable`1 source) +269
   SebraeFE.Models.Repositories.InterestsRepository.DeleteInterests(Interests interestsToDelete) +418
   SebraeFE.Models.Managers.InterestsManager.DeleteInterests(Interests interestsToDelete) +41
   SebraeFE.Models.Facades.InterestsFacade.DeleteInterests(Interests interestsToDelete) +41
   SebraeFE.Controllers.OportunidadeController.ApagarInteresse(Int32 Id) +265
   lambda_method(ExecutionScope , ControllerBase , Object[] ) +78
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24
   System.Web.Mvc.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7() +53
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258
   System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +20
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258
   System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +20
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +193
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +382
   System.Web.Mvc.Controller.ExecuteCore() +123
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +23
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +144
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +54
   System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +406
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +76


Version Information: Microsoft .NET Framework Version:2.0.50727.3053; ASP.NET Version:2.0.50727.3053

неподтвержденные технологии:

  • asp.net mvc 1

  • ADO.net и LINQ

Пожалуйста, помогите мне!

Ответ 1

откройте свою модель .edmx с помощью редактора xml и измените этот

 ProviderManifestToken="2008"

to

 ProviderManifestToken="2000"

это может быть linq.first(), который генерирует sql script 'Top (1)', который работает в sql2005, но должен быть 'top 1' с out '(' и ')' в sql 2000

он работает в моем решении.

Ответ 3

Некоторые запросы SQL Server 2005, которые содержат специальные расширения, такие как ROW_NUMBER(), общие выражения таблицы (например, ROW_NUMBER()). WITH x AS (...) SELECT... FROM x] и т.д. Не поддерживают обратную совместимость с SQL Server 2000.

Вы должны либо убедиться, что ваше приложение работает только на SQL Server 2005, либо вы должны переработать свои запросы, специфичные для SQL Server 2005, для поддержки SQL Server 2000, 2005 и, возможно, 2008 года для хорошей оценки. Существует множество документации по различиям в синтаксисе и семантике T-SQL среди различных версий SQL Server.

Я боюсь, что вы не получите более конкретной помощи от кого-либо, не раскрывая фактический текст запроса. Это было бы похоже на то, как я просил вас исправить мою орфографическую ошибку в строке 12 моего 3-го курса английского языка. Нет, вы не можете этого сделать, но можете ли вы исправить это для меня?

Ответ 4

Это довольно сложно, не имея представления о том, как выглядит ваш запрос. Это конкретное исключение вызвало меня раньше с помощью выражений SELECT TOP. В SQL 2005+ простой SELECT TOP может выглядеть так:

SELECT TOP (50) FROM Events

Однако вы получите точное исключение синтаксической ошибки, о котором вы говорите в SQL 2000, потому что SQL 2000 не допускает скобки в выражении SELECT TOP. Другими словами, это должно выглядеть так:

SELECT TOP 50 FROM Events

Еще один совет, чтобы попытаться разобраться в этом, - получить точный оператор SQL, сгенерированный, затем зайти в SQL 2000 Enterprise Manager и запустить его. Когда он дает вам такую ​​же ошибку, в некоторых случаях EM укажет вам немного ближе к тому, где проблема синтаксиса существует (попробуйте разделить запрос на несколько строк)

Ответ 5

Эта ошибка произошла со мной с помощью Entity Framework с SQL Server 2008 в службе Windows, работающей на платформе .NET 4.

Это было просто на самом деле, дважды проверьте, что ваш запрос безопасен по типу в linq. IE не выполняет предложение where, например fld > 0, если fld является varchar, вы должны делать где fld isnot nothing. Проблема, я думаю, когда .net пытается сопоставить типы linq с типами полей db, и SQL Server не любит запускать SQL.

Так что в основном эта ошибка - пикник, а не сбой программного обеспечения.

Мой запрос, который прошел splat, был

qry = qry.Where(Function(rslts) (rslts.SubscriptionEndDate <= DeadLine _
       And rslts.SubscriptionCancelledByName > 0 _
       And rslts.SubscriptionIsRenewalEmailSent = False))

Запрос, который решил проблему, был

qry = qry.Where(Function(rslts) (rslts.SubscriptionEndDate <= DeadLine _
       And rslts.SubscriptionCancelledByName IsNot Nothing _
       And rslts.SubscriptionIsRenewalEmailSent = False))

Надеюсь, что это поможет

Ответ 6

Похоже, вы пытаетесь использовать что-то, что есть в SQL 2005, а SQL 2000 - нет. Общие выражения таблицы?

Ответ 8

Я не нашел реальной причины. Но это похоже на linq и sql2000, как сказал Чарльз Конвей.

Код ниже работает для меня:

заменить:

//...
    Interests original = (from m in _db.InterestsSet where m.Id == interestsToDelete.Id select m).FirstOrDefault();
//...

в

//..
        Interests original = null;

        foreach (var i in from m in _db.InterestsSet where m.Id == interestsToDelete.Id select m){
            original = i;
            break;
        }
    //...

Мне это не нравится, но работает...