0

如何使用 VB 运行查询,该查询将根据列 appClickCount 返回 TOP 10 结果并将列 appFAIList 更新为 1,并且低于 TOP 10 的任何内容都会给列 appFAIList 的值为 0?

Using sqlCon = New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\ITCSDatabase.mdf;Integrated Security=True")
        sqlCon.Open()
        Dim sqlText = "SELECT top 10 appClickCount " & _
            "FROM appTable" & _
        "UPDATE appTable SET appFAIList = 1"
        Dim cmd = New SqlCommand(sqlText, sqlCon)
        cmd.ExecuteScalar()
    End Using
4

2 回答 2

3

改为运行此 SQL 语句

with t as (
  select *, rn=row_number() over (order by 1/0)
  from appTable)
update t set
  appFAIList = case when rn<=10 then 1 else 0 end

不过,您的vb.net代码有很多错误。您正在使用ExecuteScalar,它旨在返回单行单列结果。如所写,它将为您提供第一个 appClickCount 值。

另一个问题是,TOP 10在没有相应 ORDER BY 的情况下在 SQL Server 中使用意味着它将非常任意(也称为“随机”)从表中返回任何 10 条记录。

于 2013-04-25T05:05:08.990 回答
0
UPDATE a
SET a.appFAIList = 1
  FROM appTable AS a
  INNER JOIN 
  (SELECT top 10 appClickCount FROM appTable) AS b ON a.SomeField = b.SomeField

SomeField - may be primary key of your table
于 2013-04-25T05:05:42.947 回答