我对看似简单的代码有疑问。我有一个名为Songs_DB的表,其中包含一些歌曲的详细信息,其中包括一个名为ELO的列,该列基本上是它们的排名。我想根据ELO得分最高的10首歌曲将值从SONG_ID列转移到另一个表Smartlist。
我想出的当前代码如下-
Dim Insert As New SqlCommand("INSERT INTO SMARTLIST (Song_ID) VALUES (SONG_ID) FROM SONGS_DB WHERE ELO IN (SELECT TOP 10 ELO FROM SONGS_DB ORDER BY ELO [ASC])", con)
Insert.ExecuteNonQuery()
这将返回以下错误-
System.Data.SqlClient.SqlException:'关键字'FROM'附近的语法不正确。 关键字“ ORDER”附近的语法不正确。
IV尝试通过其他几种方式来做到这一点,但一直没有运气!我在做什么错了?
答案 0 :(得分:3)
使用此查询:
INSERT INTO SMARTLIST (Song_ID) SELECT TOP 10 Song_ID FROM SONGS_DB ORDER BY ELO DESC
这将仅插入Song_ID列。
如果您想要更多列,则必须像这样包含它们:
INSERT INTO SMARTLIST (Song_ID, Column2)
SELECT TOP 10 Song_ID, Column2 FROM SONGS_DB ORDER BY ELO DESC
我想您希望DESC
的行从较高的ELO
到较小的行。
如果不是这种情况,请删除DESC
。
答案 1 :(得分:0)
您可以使用以前的答案或像这样更正自己的代码:
Dim Insert As New SqlCommand("INSERT INTO SMARTLIST (Song_ID) select SONG_ID FROM SONGS_DB WHERE ELO IN (SELECT TOP 10 ELO FROM SONGS_DB ORDER BY ELO [ASC])", con)
Insert.ExecuteNonQuery()