'row_number' не является распознанным именем функции. Неверный синтаксис рядом с ключевым словом "AS" - PullRequest
2 голосов
/ 23 июня 2009

Я создал простой проект с базой данных SQL Server с десятками таблиц и множеством индексов, но на самом деле ничего сложного. Нет триггеров, нет хранимых процедур, нет дополнительной "магии базы данных". Код написан на C # с использованием модели Entity и Dynamic Data Site, чтобы просто очень быстро настроить основы, поэтому некоторые типизирующие обезьяны могут быть задействованы и выполнять некоторые основные операции с вводом данных, пока я изменю проект, чтобы он стал более зрелым. .

Протестировано на SQL Server 2005 и все работало нормально. Поэтому я выполнил настройку через Visual Studio и отправил ее набрав Monkeys и их администратору. Все, что им нужно было сделать, это: 1) Создать новую базу данных. 2) Выполните скрипт Create для базы данных. 3) Установите настройки, которые я дал им. 4) Измените строку подключения, которая для удобства помещается в специальный файл конфигурации. 5) Используйте веб-интерфейс и сообщите мне, если что-то пойдет не так.

И что-то пошло не так. Эта полная ошибка: Строка 1: неправильный синтаксис рядом с '('. 'Row_number' не является распознанным именем функции. Неверный синтаксис рядом с ключевым словом 'AS'.

Я не использую 'row_number' в моем коде. Я просто использую Linq для запросов. Кроме того, из-за модели сущностей мне даже не нужно сильно беспокоиться о работе с SQL. (хотя я в этом хорош.)

Мое первое предположение заключается в том, что они используют неверную строку подключения. Возможно, они устанавливали это приложение на SQL Server (который все еще должен работать), но они не изменили строку подключения полностью, и теперь мой проект думает, что использует SQL Server 2005. (или что-то еще.) Я прав или это вызвано некоторыми другая неприятная ошибка?

Полная ошибка:

[SqlException (0x80131904): строка 1: Неверный синтаксис рядом с '('. 'row_number' не распознан имя функции Неверный синтаксис рядом ключевое слово «AS».]
System.Data.SqlClient.SqlConnection.OnError (SqlException исключение, Boolean breakConnection) +1950890 System.Data.SqlClient.SqlInternalConnection.OnError (SqlException исключение, Boolean breakConnection) +4846875 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, Результат DbAsyncResult) + 162
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, метод String) +32 System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior поведение, строковый метод) + 141
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior поведение) + 12
System.Data.Common.DbCommand.ExecuteReader (CommandBehavior поведение) + 10
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands (EntityCommand entityCommand, CommandBehavior поведение) + 387

[EntityCommandExecutionException: An произошла ошибка при выполнении определение команды. Увидеть внутренний исключение для деталей.]
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands (EntityCommand entityCommand, CommandBehavior поведение) + 423
System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute (ObjectContextcontext, ObjectParameterCollection значение параметра) + 743
System.Data.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOption) + 157
System.Data.Objects.ObjectQuery`1.GetIListSourceListInternal () +13 System.Data.Objects.ObjectQuery.System.ComponentModel.IListSource.GetList () +7 System.Web.UI.WebControls.EntityDataSourceView.ExecuteSelect (DataSourceSelectArguments аргументы, создатель qbConstructor) +1168 System.Web.UI.WebControls.EntityDataSourceView.ExecuteSelect (DataSourceSelectArguments аргументы) + 102
System.Web.UI.DataSourceView.Select (DataSourceSelectArguments аргументы, DataSourceViewSelectCallback callback) +19 System.Web.UI.WebControls.DataBoundControl.PerformSelect () +142 System.Web.UI.WebControls.BaseDataBoundControl.DataBind () +73 System.Web.UI.WebControls.GridView.DataBind () +4 System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound () +82 System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls () +72 System.Web.UI.Control.EnsureChildControls () +87 System.Web.UI.Control.PreRenderRecursiveInternal () +44 System.Web.UI.Control.PreRenderRecursiveInternal () +171 System.Web.UI.Control.PreRenderRecursiveInternal () +171 System.Web.UI.Control.PreRenderRecursiveInternal () +171 System.Web.UI.Control.PreRenderRecursiveInternal () +171 System.Web.UI.Control.PreRenderRecursiveInternal () +171 System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) + 842


Это приложение ранее было построено на системе SQL Server 2000, а затем оно также работало просто отлично. Тем не менее, тестовая база данных была обновлена ​​до 2005 года, в то время как производственная база данных все еще использует 2000. Я ожидаю, что это не должно вызвать проблем, но я прав в своем предположении?

Ответы [ 4 ]

5 голосов
/ 16 июля 2010

Я знаю, что это старая ветка, но я думаю, что она все еще имеет некоторое значение.

Я столкнулся с той же проблемой. Я занимался разработкой на сервере sql2008 и развертыванием на сервере sql2000. Вместо разработки на вашем компьютере 2000 года откройте файл .edmx в WordPad и измените токен манифеста на «2000». Затем перестройте и опубликуйте. Гораздо проще, чем разрабатывать на другой машине.

2 голосов
/ 23 июня 2009

Глядя на исключение, кажется, что соединение указывает на базу данных SQL Server, которая не является SQL 2005.

ROW_NUMBER поддерживается в SQL 2005.

2 голосов
/ 23 июня 2009

Ну, я сделал простой тест. Я связал свой проект с базой данных SQL Server 2000, установил базу данных и запустил сценарии SQL. Затем, без перекомпиляции, я использовал свой сайт для подключения к этой базе данных, и он не удался. Это была та же ошибка.

Затем следующая часть теста: я обновил модели сущностей в своем проекте и перекомпилировал весь проект. Все еще связанный с SQL Server 2000, я снова запустил сайт, и вот он мой прекрасный сайт. : -)

Как оказалось, модель Entity (и LINQ-TO-SQL) будет определять, какую базу данных вы используете при компиляции проекта. Если вы используете 2005, окончательный код будет оптимизирован для 2005, и вы не сможете установить все это на SQL Server 2000.

Итак, как это ни раздражает, мне придется продолжать разработку на компьютере с SQL Server 2000. (И надрать кому-нибудь задницу, потому что он должен был проверить мои настройки в системе, аналогичной конечному пользователю!)

2 голосов
/ 23 июня 2009

ROW_NUMBER() используется для выполнения таких операций, как Skip / Take, по крайней мере, в SQL Server 2005/2008. Если вы ориентируетесь на более раннюю версию SQL Server, это может привести к путанице.

LINQ-to-SQL делает разумную попытку поддержки SQL 2000 (хотя не все поддерживается) - хотя, честно говоря, я не знаю, поддерживает ли EF, однако.

...