3つの異なるテーブルを結合し、プログラム内にデータを表示する、この単純なビューを適切に設定しました。しかし、テーブルPRODCODEの列を次のように更新できることに気付きました。ビュー内の列の更新
update PRODCODE_VW set MAXGH = 5.00 where ORIGREC = 114406 --RETURNS 1 UPDATED
そして1レコードが更新されます。しかし、ExpectedLevelsの更新を行うと、0行が更新されます。私はそれが残っているので、これは仮定しています。更新ステートメントではなくビューの設定方法を変更するだけで、これを回避する方法はありますか?
update PRODCODE_VW set EMIN = 5.00 where ORIGREC = 114406 --RETURNS 0 UPDATED
これは私が所定の位置に設定した図である。
IF EXISTS (SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = N'PRODCODE_vw')
DROP VIEW PRODCODE_vw
GO
CREATE VIEW dbo.PRODCODE_vw
AS
SELECT PRODCODE.STUFF,PRODCODE.ORIGREC,PRODCODE.PRODCODE,PRODCODE.PRODNAM,
C1JMASTER.C1JTYPE, EXPECTEDLEVELS.EMIN, EXPECTEDLEVELS.EMAX
FROM PRODCODE (NOLOCK)
LEFT JOIN C1JMASTER (NOLOCK)
ON PRODCODE.c1jcode = C1JMASTER.c1jcode
LEFT JOIN EXPECTEDLEVELS
ON PRODCODE.PRODCODE = EXPECTEDLEVELS.PRODCODE
GO
あなたは本当にNoLockを避けるべきです。これは不適切な名前が付けられており、SQL Serverに他のトランザクションによって保持されている既存のロックを無視するように指示します。つまり、コミットされていないデータを読み取る可能性があります。 NoLockヒントを含むクエリでは、データの取得に必要なオブジェクトのロックが要求されます。 –