*UPDATE *
现在范围已经稍微扩大了,我现在需要检索字段“Id、uri、linkTo”。这如何改变事情???
我正在使用 MS-SQL 2005 数据库并具有以下存储过程;
CREATE PROCEDURE dbo.getNewAds
(
@region
)
AS
BEGIN
SELECT TOP 1 Id, uri, linkTo FROM Adverts
ORDER BY NEWID()
WHERE adRegion = @region
END
然后,我想将“1”添加到同一个表中名为 adShown 的列中,以获取检索到的单个结果。在同一程序中执行此操作的最简单/最快的方法是什么?
预先感谢您可以提供的任何帮助。
尝试一个命令:
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
更新 (Transact-SQL) http://msdn.microsoft.com/en-us/library/ms177523.aspx说:
TOP(表达式)[百分比]
指定将更新的行数或百分比。
表达式可以是行的数字或百分比。
与 INSERT 一起使用的 TOP 表达式中引用的行,
更新、合并或删除不按任何顺序排列。
但在我有限的测试中(测试表中的行不多),看起来它每次都更新同一行,并且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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)