簡體   English   中英

在非托管編程模式下工作的最佳實踐是什么

[英]What is the best practice to work in unmanaged programming pattern

我有一個查詢

UPDATE dbo.M_Room
 SET

 //do something
WHERE PK_RoomId= @RoomId AND IsActive=1 AND FK_DepartmentId =@DepartmentId

現在假設PK_RoomId是我的M_Room的密碼,並且是自動遞增的字段。 所以據此我本可以使用

WHERE PK_RoomId= @RoomId

而不是

WHERE PK_RoomId= @RoomId AND IsActive=1 AND FK_DepartmentId =@DepartmentId

如果使用第二條件而不是第一條件,我可以克服的所有威脅是什么? 如果我們沒有任何關系/約束(PK,FK等),則由於數據庫的非托管結構而實際存在且無法實現。

在這種情況下,您的建議是什么? 應該采取什么措施來保持數據的一致性。

我認為將WHERE更改為WHERE PK_RoomId= @RoomId並不是一個好主意。 第一部分(您要保留的部分)用於標識記錄。 第二部分( AND IsActive=1 )用於根據房間是否處於活動狀態來限制更新。 關於最后一部分( AND FK_DepartmentId =@DepartmentId ),這可能意味着有時您僅在房間屬於您指定的部門時才想要更新房間。 這也可能是有用的。

為什么要更改查詢呢?

如果您使用的是READ-UNCOMMITTED事務,或者根本不使用任何事務,或者數據已經長時間停留在某人的屏幕上,那么其他條件可能使您免於掩埋更新,假設您//做某事會IsActive列。

它也可以作為最后的防范措施,以防誤解(查看房間是否處於活動狀態,然后忘記利用事實)。

無論哪種情況,請確保檢查更新的行數。

您的倒數第二段建議room_id應該是唯一的; 如果是這樣,您將總是遇到麻煩。

就我自己而言,如果我懷疑隱藏的更新可能會發生,我將傾向於對其進行明確檢查,並且我認為防止編程錯誤的這種形式是不尋常的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM