-2

アセットのリストとテーブル「tbl_info」から取得したそれらの情報を含むデータベースがあり、ソリューションはSQLでチェックアウトしますが、送信後にテーブルを更新しません。どこが間違っているのかわかりません。私はストアドプロシージャにかなり慣れていませんが、SQLについてはまともです。

これが私のコードです。

CREATE PROCEDURE [update_TBL_INFO_4]
(@ASSET_NUMBER  [nvarchar],
 @PORT_NUMBER   [nvarchar],
 @MACHINE_NAME  [nvarchar],
 @TYPE  [nvarchar],
 @BRANCH    [nvarchar],
 @BUILDING_NUMBER   [nvarchar],
 @FLOOR     [nvarchar],
 @ROOM_NUMBER   [nvarchar],
 @TELEPHONE_NUMBER  [nvarchar],
 @USERS     [nvarchar],
 @SERIAL    [nvarchar])

AS 
BEGIN
UPDATE [datasystems].[dbo].[TBL_INFO] 

SET  [ASSET_NUMBER]  = @ASSET_NUMBER,
 [PORT_NUMBER]   = @PORT_NUMBER,
 [MACHINE_NAME]  = @MACHINE_NAME,
 [TYPE]  = @TYPE,
 [BRANCH]    = @BRANCH,
 [BUILDING_NUMBER]   = @BUILDING_NUMBER,
 [FLOOR]     = @FLOOR,
 [ROOM_NUMBER]   = @ROOM_NUMBER,
 [TELEPHONE_NUMBER]  = @TELEPHONE_NUMBER,
 [USERS]     = @USERS,
 [SERIAL]    = @SERIAL 

WHERE 
( [ASSET_NUMBER]     = @ASSET_NUMBER AND
 [PORT_NUMBER]   = @PORT_NUMBER AND
 [MACHINE_NAME]  = @MACHINE_NAME AND
 [TYPE]  = @TYPE AND
 [BRANCH]    = @BRANCH AND
 [BUILDING_NUMBER]   = @BUILDING_NUMBER AND
 [FLOOR]     = @FLOOR AND
 [ROOM_NUMBER]   = @ROOM_NUMBER AND
 [TELEPHONE_NUMBER]  = @TELEPHONE_NUMBER AND
 [USERS]     = @USERS AND
 [SERIAL]    = @SERIAL)
END
GO
4

1 に答える 1

1

WHERE句はすべてのパラメーターをチェックするため、それらのいずれかが異なる場合 (つまり、更新された値を渡す場合)、WHERE一致するレコードは見つかりません。

主キーが定義されている場合は、WHERE句でそれを使用し、残りを更新します。それ以外の場合は、適切な一致を見つけるために古い値も渡す必要がある場合があります。

アップデート:

主キーがである場合、主キーではないフィールドを更新し、次のように節でASSET_NUMBER主キーのみを使用する必要があります。WHERE

UPDATE 
    [datasystems].[dbo].[TBL_INFO] 
SET  
    [PORT_NUMBER] = @PORT_NUMBER,
    [MACHINE_NAME] = @MACHINE_NAME,
    [TYPE] = @TYPE,
    [BRANCH] = @BRANCH,
    [BUILDING_NUMBER] = @BUILDING_NUMBER,
    [FLOOR] = @FLOOR,
    [ROOM_NUMBER] = @ROOM_NUMBER,
    [TELEPHONE_NUMBER] = @TELEPHONE_NUMBER,
    [USERS] = @USERS,
    [SERIAL] = @SERIAL 
WHERE 
    [ASSET_NUMBER] = @ASSET_NUMBER
于 2012-12-18T14:04:35.717 に答える