2013-04-25 4 views
0

상위 10 개의 결과를 appClickCount 열을 기반으로 반환하고 appFAIList 열을 1로 업데이트하고 TOP 10 아래의 모든 항목이 appFAIList 열의 값을 0으로 지정하는 VB 쿼리를 어떻게 실행합니까?상위 10 개 및 업데이트

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 

답변

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 값을 제공합니다.

다른 문제는 그 방법으로 해당 ORDER없이 SQL Server의 TOP 10를 사용하여 그것이 것 상당히 임의적으로 (일명 "무작위") 테이블에서 모든 10 개 개의 레코드를 반환합니다.

+1

by 1/0 DivisionByZero 예외? – realnumber3012

+1

@ realnumber3012 댓글을 달기 전에 시도해 보시지 않겠습니까? 내 프로필 좀 봐. [SQL Fiddle Demo] (http://sqlfiddle.com/#!6/c1c3b/2/2) – RichardTheKiwi

+0

oracle에서 시도하십시오. 작동하지 않음) SQL Server가 내 workstatiton에 설치되지 않음 – realnumber3012

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 
관련 문제