【问题标题】:Error when trying to update specific SQL Server table column based on the highest Id of the table row尝试根据表行的最高 ID 更新特定 SQL Server 表列时出错
【发布时间】:2019-08-27 17:20:00
【问题描述】:

我正在尝试更新 SQL Server 表中的特定列,其中该列所在行的 Id 是当前表中的最高 Id。错误消息说我的查询中“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 最高的行,但结果是一条错误消息。即使语法应该是正确的。

【问题讨论】:

  • 您的问题明确指定了 MySQL,但代码与该数据库不兼容。非常混乱。
  • 有点好奇你在哪里发现 order by 可以用在 Update 语句上?
  • 您好,请仔细检查一下,您是对的 Gordon Linoff。它只是在我在 Visual Studio 中添加它的列表上称为 Sql Server 数据库。所以我很抱歉我的无知。正如您可能知道的那样,我是数据库的初学者。这是史蒂夫的具体链接。 dzone.com/articles/update-row-highest-id-mysql在其他地方找到类似的东西,但现在我找不到页面

标签: c# sql asp.net database sql-update


【解决方案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 语句以及如何使用子查询以获得更好的理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 2022-11-16
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多