سؤال

أنا بحاجة إلى تحديد البيانات عندما وينظر في الصفحة وتحديث 'آراء' عمود هل هناك طريقة للقيام بذلك في استعلام واحد أو لا بد لي من استخدام متميزة الاستفسارات?

هل كانت مفيدة؟

المحلول

إذا كنت لا تريد/تحتاج إلى استخدام المعاملات ، يمكنك إنشاء إجراء مخزن التحديثات الأولى على عدد مرات المشاهدة ثم يختار القيم وإعادتها إلى المستخدم.

نصائح أخرى

سيكون لديك للقيام بذلك في بيانين في صفقة واحدة

Begin Tran

Update Pages Set Views = Views + 1 Where ID = @ID
Select Columns From Pages Where ID = @ID

Commit Tran

سيكون من المفيد إذا كنت سرد RDBMS كنت تستخدم SQL Server قد خرج بيان

على سبيل المثال

USE AdventureWorks;
GO
DECLARE @MyTestVar table (
    OldScrapReasonID int NOT NULL, 
    NewScrapReasonID int NOT NULL, 
    WorkOrderID int NOT NULL,
    ProductID int NOT NULL,
    ProductName nvarchar(50)NOT NULL);

UPDATE Production.WorkOrder
SET ScrapReasonID = 4
OUTPUT DELETED.ScrapReasonID,
       INSERTED.ScrapReasonID, 
       INSERTED.WorkOrderID,
       INSERTED.ProductID,
       p.Name
    INTO @MyTestVar
FROM Production.WorkOrder AS wo
    INNER JOIN Production.Product AS p 
    ON wo.ProductID = p.ProductID 
    AND wo.ScrapReasonID= 16
    AND p.ProductID = 733;
SELECT OldScrapReasonID, NewScrapReasonID, WorkOrderID, 
    ProductID, ProductName 
FROM @MyTestVar;
GO

كيو هو التحديث البيان العائدين شرط أن عودة مجموعة نتائج مثل SELECT:

UPDATE mytable
 SET views = 5
 WHERE id = 16
 RETURNING id, views, othercolumn;

أنا متأكد أن هذا ليس معيار على الرغم من.أنا لا أعرف إذا كان أي قواعد بيانات أخرى لتنفيذ ذلك.

تحرير:لقد لاحظت فقط أن سؤالك له "الخلية" الوسم.ربما يجب أن نذكر أنه في السؤال نفسه.انها جيدة بيانات عامة على الرغم من سؤال - وأود أن نرى كيف نفعل ذلك في قواعد البيانات الأخرى.

لقد استخدمت هذه الخدعة مع جافا و SQL Server سيتم أيضا تمكنك من إرسال الأمرين في واحد PreparedStatement.

update tablex set y=z where a=b \r\n select a,b,y,z from tablex

هذا سوف تحتاج إلى أن تكون في قراءة الصفقة التي ارتكبت على العمل كما كنت أعتقد أنه ينبغي على الرغم من.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top