我正在尝试在我的应用程序中实现事务。我只是想像 BeginTransaction() 文档中显示的示例一样实现它。
Public Shared Sub Process(wwid As String, trade_id As Integer, disposition As Boolean)
Dim q As String
Dim cmd, cmd_select As SqlCommand
Dim reader As SqlDataReader
Dim trans As SqlTransaction
Dim user_id As Integer = User.CheckAuthentication(wwid)
If user_id > 0 Then
Using conn As New SqlConnection(CNGDB)
conn.Open()
'1. ReadUncommitted
'2. ReadCommitted
'3. RepeatableRead
'4. Serializable
'5. Snapshot
trans = conn.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted)
Try
q = "UPDATE Trades SET Disposition = @disposition, FinalizedAt = @finalized_at" & _
" WHERE …
Run Code Online (Sandbox Code Playgroud) 我有一个非常复杂的数据模型。如果不解释正在建模的内容,我将无法理解大多数 SQL 示例,因此我将尝试进行解释。
Mainlines -> Releases -> Overlays -> Calibrations <- Parameters
Calibrations 是 Mainline-Release-Overlay 链和 Parameters 的子节点。这是我想退货的套装。
现在,复杂性在于——为了节省空间——我们存储基本 Mainline 的校准,然后只存储在发布和覆盖级别发生更改时的差异。这会产生大约 16K 行的“基本”校准集,然后每个版本有几百个更改,每个覆盖可能只有几个更改。发生参数删除。为了跟踪这一点,校准有一个状态字段 (tinyint),它被设置为 1 以进行删除。
叠加层依次进行版本控制。因此,要获得完整的“校准”,我们需要查询校准表以获取最新版本的参数数据,直至特定的叠加版本号。参数元数据可能会改变,但名称保持不变,因此这些校准可能指的是不同版本的参数,尽管名称相同。
到目前为止,以下内容已经完美且即时地运行(有以下注意事项):
SELECT c.Parameter_ParameterID, p.Designation AS Name, c.Data, o.Version
FROM Calibrations c, Parameters p, Overlays o, Releases r
WHERE r.Mainline_MainlineID = 9
AND o.Release_ReleaseID = r.ReleaseID
AND c.Overlay_OverlayID = o.OverlayID
AND c.Parameter_ParameterID = p.ParameterID
AND o.Version =
(SELECT MAX(o1.Version)
FROM Parameters p1, Calibrations c1, Overlays o1, Releases r1
WHERE r1.Mainline_MainlineID = 9
AND o1.Release_ReleaseID …
Run Code Online (Sandbox Code Playgroud) performance sql-server sql-server-2012 greatest-n-per-group query-performance