Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn MS-SQL - Cập nhật bản ghi được truy xuất thông qua Thủ tục được lưu trữ

hãy thử một lệnh duy nhất:

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

CẬP NHẬT (Giao dịch-SQL) nói rằng:

nhưng trong thử nghiệm giới hạn của tôi (không có nhiều hàng trong bảng thử nghiệm), có vẻ như nó cập nhật cùng một hàng mỗi lần và OP đang cố gắng cập nhật một hàng khác nhau mỗi lần.

vì vậy hãy thử cái này:

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 [email protected]
END


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tìm một thủ tục được lưu trữ có chứa <text>?

  2. Trả lại ID được chèn lần cuối mà không cần sử dụng truy vấn thứ hai

  3. Cách chỉ cài đặt cấu phần SQL Server Management Studio 2008

  4. Cách trích xuất giá trị từ cột và cập nhật kết quả trong một cột khác

  5. Nhận danh sách cơ sở dữ liệu từ SQL Server