Ошибка при попытке обновить определенный столбец таблицы SQL Server на основе самого высокого идентификатора строки таблицы - PullRequest
0 голосов
/ 05 апреля 2019

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

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

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

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])
);

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

1 Ответ

0 голосов
/ 05 апреля 2019
[ 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...