对于SQL中的每个等效项

swo*_*978 0 sql sql-server sql-server-2005

我有一个表,tblDocs有几列:

DocName varchar(50)
DocLocation int
Active int
DocID int
Run Code Online (Sandbox Code Playgroud)

表中的所有条目都有一个DocNameDocLocation. Active并且DocID是空白的.

我需要做的是tblDocs我需要检查每一行的值,DocLocation并根据我更新的值tblDocs,设置ActiveDocID列.我以为我会用,CASE WHEN但我不确定 - 我不太了解sql.如果我使用c#或vb.net,它将相当于一个for each循环.

foreach row as DBRow in tblDocs
    row.active = 1
    row.docID = ID
next
Run Code Online (Sandbox Code Playgroud)

你是如何为SQL Server 2005做到这一点的?

UPDATE

从下面的几个回答中,听起来我会使用一个UPDATE声明.所以我可以通过做类似的事情来实现这一点

UPDATE tblDocs
SET docID = 
    CASE DocLocation
        WHEN 1 THEN --do stuff
        WHEN 3 THEN --do other stuff
Run Code Online (Sandbox Code Playgroud)

这将遍历tblDocs的所有行并更新DocID以基于DocLocation?

Vot*_*ple 5

SQL的强大之处在于您不需要编写循环; 你只需要告诉它想要更新的内容.例如,如果您想将所有行设置为活动,那么您只需...

UPDATE tblDocs
SET Active = 1
Run Code Online (Sandbox Code Playgroud)

你想要这取决于位置,所以为什么不...

UPDATE tblDocs
SET Active = 1, DocID=42
WHERE DocLocation = 7
Run Code Online (Sandbox Code Playgroud)

(当然,替换适当的值.)可以编写单个查询来更新所有内容,但这取决于具体需要更改的内容.