2010-04-27 9 views
2

데이터베이스의 각 테이블에 4 개의 MySQL 저장 프로 시저를 제공해야합니다. get, update, insert 및 delete를위한 것입니다.XML에서 레코드 업데이트

"가져 오기", "삭제"및 "삽입"은 간단합니다. 어떤 매개 변수가 설정되고 어떤 매개 변수가 설정되지 않을지 모르기 때문에 문제는 "업데이트"입니다. 일부 매개 변수는 NULL로 설정 될 수 있고 다른 매개 변수는 변경되지 않으므로 제공되지 않습니다.

Google에서 이미 여러 가지 검색을 한 후에 UpdateXML이라는 기능을 사용할 수 있다는 것을 알았지 만 예제가 너무 복잡하고 2007 년 기사가 일부 있습니다. 이 순간이나 더 쉬운 기술이 더 있는지 알아보십시오.

귀하의 의견, 문서, 링크, 기사 또는 당신이 사용했던 무언가의 무엇이든 당신이이 마음을 잘 이해할 수있을 것이다 : D

건배.

답변

1

일반적으로 프런트 엔드 데이터베이스의 행 데이터가있는 경우 데이터베이스에서 해당 행을 업데이트하는 데 사용할 수있는 모든 값이 있어야합니다. 실제로 변경되었는지 여부에 관계없이 모든 값을 업데이트에 전달해야합니다. 그렇지 않으면, 데이터베이스는 실제로 열의 NULL 값을 얻었는지 여부를 알지 못합니다. 그 이유는 실제 값을 전달하지 않았기 때문입니다.

테이블에서 특정 열을 필요로하지 않는 응용 프로그램 영역을 가지려면 해당 열을 사용하지 않는 추가 저장 프로 시저를 설정할 수 있습니다. 프런트 엔드 개체를 채울 때 데이터베이스에서 모든 열을 검색하는 것이 더 쉽습니다. 여분의 열의 오버 헤드는 일반적으로 최소한이고 여러 업데이트 저장 프로 시저의 유지 관리에 가치가 있습니다.

다음은 예입니다. 그것은 MS SQL 서버 구문, 그래서 당신은 약간 변경해야 할 수도 있습니다, 그러나 희망이 아이디어를 보여

CREATE PROCEDURE Update_My_Table 
    @my_table_id INT, 
    @name   VARCHAR(40), 
    @description VARCHAR(500), 
    @some_other_col INT 
AS 
BEGIN 
    UPDATE 
     My_Table 
    SET 
     name   = @name, 
     description = @description, 
     some_other_col = @some_other_col 
    WHERE 
     my_table_id = @my_table_id 
END 

CREATE PROCEDURE Update_My_Table_Limited 
    @my_table_id INT, 
    @name   VARCHAR(40), 
    @description VARCHAR(500) 
AS 
BEGIN 
    UPDATE 
     My_Table 
    SET 
     name   = @name, 
     description = @description 
    WHERE 
     my_table_id = @my_table_id 
END 

당신이 볼 수 있듯이, 당신이 업데이트하지 않는 그 열을 제거를 UPDATE 문에서. 배 밖으로 이동하지 않고 업데이트하려는 모든 열의 조합에 대해 저장 프로 시저를 만들려고 시도하십시오. 처음부터 테이블에서 선택할 때 DB에서 여분의 열을 얻는 것이 훨씬 쉽습니다. 결국 동일한 값을 전달하게 될 것이고 서버는 똑같은 값으로 열을 업데이트 할 것이지만 큰 문제는 아닙니다. 프론트 엔드를 코딩하여 데이터베이스에서 실제로 아무것도 업데이트하기 전에 하나 이상의 열이 변경되었는지 확인할 수 있습니다.

관련 문제