2012-12-18 2 views
-2

"tbl_info"테이블에서 가져온 애셋 목록 및 해당 정보가 포함 된 db가 있으며 솔루션은 제출 후 테이블을 업데이트하지 않지만 SQL에서는 체크 아웃합니다. 내가 틀린 곳을 모른다. 나는 저장 프로 시저와 괜찮은 w/sql에 상당히 익숙하다.저장 프로 시저를 사용하여 테이블 정보 업데이트

여기 내 코드가 있습니다. 그 중 하나가 다른 경우 (업데이트 된 값을 전달하는 경우 즉,) 당신의 WHERE 절 검사 params 객체를 파라미터의 모든 이후

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 
+3

WHERE 절은 의미가 없습니다. 레코드가 업데이트 될 수있는 유일한 방법은 전달 된 데이터가 테이블에있는 것과 동일한 경우이며, 결과는 아무 것도 변경되지 않는다는 것입니다. 테이블의 기본 키는 무엇입니까? – LittleBobbyTables

+0

왜이 Q에 대한 모든 downvotes? – Darren

+0

모든'@PORT_NUMBER [nvarchar],'매개 변수는 멋지고 정확하게 ** 1 문자 ** 길어질 것입니다.'(N) VARCHAR'을 사용할 때 항상 ** ** ** 길이 * * 매개 변수! –

답변

1

이는 WHERE는 기록을 발견하지 않을 것을 시합.

기본 키가 정의되어있는 경우 WHERE 절에서 해당 키를 사용하고 나머지는 업데이트하십시오. 그렇지 않으면 적절한 일치 항목을 찾기 위해 이전 값을 전달해야 할 수도 있습니다.

UPDATE : 기본 키가 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 
+0

기본 키는 asset_number – user1913068

+0

@user1913068입니다. 그런 다음 WHERE 절을 WHERE ([ASSET_NUMBER] = @ASSET_NUMBER)로 변경하십시오. 무례하게 굴지는 않겠지 만 "괜찮은 SQL"이라면 SQL을 닦을 수도 있습니다. 이것은 매우 기본입니다. – LittleBobbyTables

+0

나는이 위치에 던져졌고 한 달의 시간 안에 이런 것들을 읽도록 책을 주었기 때문에 critisizm을 기대할 수있다. 정보를 가져 오는 능력을 가진 일주일에 일하는 사이트를 가지고있다. 이 일을하기 전에 정말 도움을 주셔서 감사합니다. – user1913068

관련 문제