Я пытаюсь обновить определенный столбец внутри таблицы 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])
);
Я ожидаю, что он обновит строку с самым высоким идентификатором, но результатом будет сообщение об ошибке. Хотя синтаксис должен быть правильным.
Любопытно, где вы нашли порядок, который можно использовать в заявлении об обновлении?
Здравствуйте, только что перепроверил, вы правы, Гордон Линофф. Он просто называется базой данных Sql Server в списке, куда я добавляю его в Visual Studio. Так что прошу прощения за свое невежество. Я новичок в базах данных, как вы, вероятно, можете сказать. Вот конкретная ссылка Стив. dzone.com/articles/update-row-highest-id-mysql Нашел что-то похожее где-то еще, но теперь не могу найти страницу
[ 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 и о том, как использовать подзапросы, чтобы лучше понять.
В вашем вопросе явно указана MySQL, но код несовместим с этой базой данных. Очень запутанно.