SQL Serverデータベース内のテーブルからパラメータを読み込み、増分し、それに基づいて他の計算を行い、これらの新しい計算値でSQLクエリを作成します。接続全体のSQL Serverテーブルをロックする
SELECT TOP 1 fruitId
FROM fruits WITH (TABLOCK, HOLDLOCK)
WHERE fruitId LIKE '1978%'
ORDER BY fruitId DESC
このフルーツIDを取得した後、いくつかの数学が行われ、データがいくつかのテーブルに書き込まれます。
私はこれらの3つのテーブルを1回のトランザクションで書いています。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
INSERT INTO Fruits (fruitId, fruitName, fruitColor)
VALUES 197867, 'Apple', 'Red';
INSERT INTO Salad (saladId, saladName)
VALUES 1234, 'Apple Salad';
INSERT INTO Ingredients(saladId, FruitId)
VALUES 1234, 197867;
INSERT INTO Ingredients(saladId, FruitId)
VALUES 1234,197866;
INSERT INTO Ingredients(saladId, FruitId)
VALUES 1234, 197980;
COMMIT TRANSACTION
私のロックは挿入部分に問題ありません。しかし、誰かがフルーツからフルーツアイデアを読むと計算が行われますが、fruitIdはユニークでなければならないので、後でトランザクションコミットのための書き込みコードが失敗します。
接続全体の果物テーブルをロックすることはできますか?
*接続全体の果物テーブルをロックすることは可能ですか? - これが可能だったとしても**これは恐ろしく悪い**アイデアです - 戦略を再考する必要があります道に行く –
私はこれを介して古いアプリケーションに書き込もうとしています。インサートセットは時々50行までで、計算されたfruitIdを使用します。私はあなたが何かを私がこれを見つけることができることを示唆することができますms SQLに新しいですか? –
@marc_sありがとう!私は私のロジックフローを変更し、それは1つのトランザクションに適合しているようだ。 –