MS-SQL查询 - 通过存储过程检索的更新记录

Phi*_*ley 1 t-sql sql-server sql-server-2005

*更新*

范围现在略有发展,我现在需要检索字段'Id,uri,linkTo'.这怎么改变了???

我正在使用MS-SQL 2005 db并具有以下存储过程;

CREATE PROCEDURE dbo.getNewAds
(
@region
)
AS
BEGIN
SELECT TOP 1 Id, uri, linkTo FROM Adverts
ORDER BY NEWID()
WHERE adRegion = @region
END
Run Code Online (Sandbox Code Playgroud)

我想在同一个表中为名为adShown的列添加"1",以获取检索到的单个结果.在同一程序中执行此操作的最简单/最快的方法是什么?

提前感谢您提供的任何帮助.

KM.*_*KM. 7

尝试一个命令:

CREATE PROCEDURE dbo.getNewAds
(
@region  --lazy, declare type!!
)
AS
BEGIN
    UPDATE TOP (1) Adverts
        SET adShown = adShown + 1
        OUTPUT INSERTED.ID
        WHERE adRegion = @region
END
Run Code Online (Sandbox Code Playgroud)

UPDATE(Transact-SQL)说:

TOP(表达)[PERCENT]

指定要更新的行数或百分比.表达式可以是行的数量或百分比.

TOP表达式中引用的与INSERT,UPDATE,MERGE或DELETE 一起使用的行不按任何顺序排列.

但是在我的有限测试中(测试表中的行数不多),看起来每次更新同一行,并且OP每次都尝试更新不同的行.

试试这个:

CREATE PROCEDURE dbo.getNewAds
(
@region  --lazy, declare type!!
)
AS
BEGIN
    DECLARE @ID int

    --select row to update
    SELECT TOP 1 
        @ID=Id 
        FROM Adverts
        WHERE adRegion = @region
        ORDER BY NEWID()


    --update and return result set in one command
    UPDATE TOP (1) Adverts
        SET adShown = adShown + 1
        OUTPUT INSERTED.ID
        WHERE ID=@ID
END
Run Code Online (Sandbox Code Playgroud)