Ошибка при попытке обновить определенный столбец таблицы SQL Server на основе самого высокого идентификатора строки таблицы

Я пытаюсь обновить определенный столбец внутри таблицы SQL Server, где идентификатор строки, в которой находится столбец, является самым высоким идентификатором, который в настоящее время находится внутри таблицы. В сообщении об ошибке говорится, что в моем запросе есть синтаксическая ошибка рядом с «ORDER».

Я уже провел некоторое исследование того, можно ли использовать оператор SQL UPDATE, за которым следует оператор ORDER BY, чтобы обновить конкретный столбец в строке с самым высоким идентификатором в таблице. Я узнал, что это возможно и каков синтаксис, но все равно получаю сообщение об ошибке, когда следую найденным рекомендациям и использую синтаксис.

Мой код подключения, связанный с событием кнопки:

SqlConnection newconnection = new SqlConnection(ConfigurationManager.ConnectionStrings["derpection"].ConnectionString);
string sql01 = "UPDATE Messages SET Besked = 'test' ORDER BY Id";

SqlCommand hmm01 = new SqlCommand(sql01, newconnection);

newconnection.Open();
hmm01.ExecuteNonQuery();
newconnection.Close();

Моя таблица:

CREATE TABLE [dbo].[Messages] 
(
    [Id]       INT IDENTITY (1, 1) NOT NULL,
    [Besked]   VARCHAR(50)  NULL,
    [BrugerID] INT          NOT NULL,
    [Username] VARCHAR (50) NOT NULL,

    PRIMARY KEY CLUSTERED ([Id] ASC),

    CONSTRAINT [FK_Users] 
        FOREIGN KEY ([BrugerID]) REFERENCES [dbo].[Users] ([Id])
);

Я ожидаю, что он обновит строку с самым высоким идентификатором, но результатом будет сообщение об ошибке. Хотя синтаксис должен быть правильным.

В вашем вопросе явно указана MySQL, но код несовместим с этой базой данных. Очень запутанно.

Gordon Linoff 05.04.2019 20:42

Любопытно, где вы нашли порядок, который можно использовать в заявлении об обновлении?

Steve 05.04.2019 20:45

Здравствуйте, только что перепроверил, вы правы, Гордон Линофф. Он просто называется базой данных Sql Server в списке, куда я добавляю его в Visual Studio. Так что прошу прощения за свое невежество. Я новичок в базах данных, как вы, вероятно, можете сказать. Вот конкретная ссылка Стив. dzone.com/articles/update-row-highest-id-mysql Нашел что-то похожее где-то еще, но теперь не могу найти страницу

Zaening 05.04.2019 21:11
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
[ WITH <common_table_expression> [...n] ]  
UPDATE   
    [ TOP ( expression ) [ PERCENT ] ]   
    { { table_alias | <object> | rowset_function_limited   
         [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]  
      }  
      | @table_variable      
    }  
    SET  
        { column_name = { expression | DEFAULT | NULL }  
          | { udt_column_name.{ { property_name = expression  
                                | field_name = expression }  
                                | method_name ( argument [ ,...n ] )  
                              }  
          }  
          | column_name { .WRITE ( expression , @Offset , @Length ) }  
          | @variable = expression  
          | @variable = column = expression  
          | column_name { += | -= | *= | /= | %= | &= | ^= | |= } expression  
          | @variable { += | -= | *= | /= | %= | &= | ^= | |= } expression  
          | @variable = column { += | -= | *= | /= | %= | &= | ^= | |= } expression  
        } [ ,...n ]   

    [ <OUTPUT Clause> ]  
    [ FROM{ <table_source> } [ ,...n ] ]   
    [ WHERE { <search_condition>   
            | { [ CURRENT OF   
                  { { [ GLOBAL ] cursor_name }   
                      | cursor_variable_name   
                  }   
                ]  
              }  
            }   
    ]   
    [ OPTION ( <query_hint> [ ,...n ] ) ]  
[ ; ]  

<object> ::=  
{   
    [ server_name . database_name . schema_name .   
    | database_name .[ schema_name ] .   
    | schema_name .  
    ]  
    table_or_view_name}  

Это полное допустимое синтаксическое дерево для оператора обновления в Sql Server, и Update .. Order By не является одним из них.

Однако вы можете использовать подзапрос, чтобы делать то, что хотите.

UPDATE Messages SET Besked = 'test'
WHERE Id IN (SELECT TOP 1 Id FROM Messages ORDER BY Id DESC)

Большое спасибо, Стив. Тот, у кого был подзапрос, сделал свое дело. Я прочитаю об операторе IN и о том, как использовать подзапросы, чтобы лучше понять.

Zaening 05.04.2019 21:18

Другие вопросы по теме