2010-12-16 3 views
1

질문이 현실적으로 들리지 않으며 여기에 내가하려는 일에 대한 코드 조각이 있습니다.where 절에 사용 된 필드와 동일한 필드 인 레코드의 필드를 업데이트 할 수 있습니까?

UPDATE Players 
SET PlayerID = 100, Name = 'L. Messi', PlayerWebsite = 'www.messi.com' 
WHERE  (PlayerID = 43) 

은, 내가 이미 사용하고 값을 업데이트하기 위해 노력하고있어 참조 내 where 절 나는 그것도 이해가되지 않습니다 알아! 하지만 그렇게하고 싶다면 가능한 방법이나 종류의 속임수가 있습니까? 이것이 가능하다면 나쁜 습관이라고 생각하거나 문제를 일으킬 수 있습니까? 내가 전에 분명하지 않다 경우 사전에

감사합니다 =)

편집 는 미안하지만이 쿼리는

+0

다른 테이블이 PlayerI에 의존하면 문제가 발생할 수 있습니다. 그렇지 않으면 아니요. –

+0

어떤 오류가 발생합니까? – zsalzbank

+0

그것은 다른 테이블과 다른 테이블에 의존하지만, 단지 "무엇을 해야할지"를 지정할 수 없습니다. "ON UPDATE" – lKashef

답변

2

트릭을 할 필요가 없습니다. 허용되고 코드가 작동해야합니다.

ID 열이 키이지만 ID가 이미있는 경우에는 열 수 없습니다. 열이 중요한 경우

가 확인하려면 실행 해 다음 행이 반환됩니다

SELECT K.TABLE_NAME, 
K.COLUMN_NAME, 
K.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K 
ON C.TABLE_NAME = K.TABLE_NAME 
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG 
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA 
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME 
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY' 
AND K.COLUMN_NAME = 'PlayerID'; 

경우, 기본 키이고 당신은 당신이 변화하는 ID가 이전에 존재하는지 확인해야 레코드 업데이트 중.

편집 : http://blogs.3sharp.com/deving/archive/2005/11/04/971.aspx

또는 당신은 그에게 IDENTITY를 만들 수 없습니다 : 그것이 IDENTITY 열이기 때문에 , 당신은 그것을 해결하기 위해 몇 가지 트릭을 사용해야합니다.

+0

ID가 존재하지 않지만 열 ID가 자동으로 증가합니다. - 내 쿼리가 실행되지 않기 때문에 - – lKashef

+0

명확한 대답을 주셔서 감사합니다 – lKashef

1

네, 정확한 방법은 실행되지 않습니다. 이 메소드는 항상 사용되며, 예를 들어 낙관적 동시성을 위해 사용됩니다. where 절은 레코드를 업데이트하기 전에 각 필드가 예상 값을 가지고 있는지 확인합니다. 다른 사람이 귀하의 첫 번째 검색과 변경 사항 저장 사이에서 레코드를 편집 한 경우 레코드가 업데이트되지 않습니다.

0

기술적으로는 가능하지만 기본 키 (PlayerID은 PK 임)를 변경하는 것은 이상한 방법입니다.

0

일회용 마이그레이션 작업을 수행하지 않는 한 ID 필드에서 특별히 수행하는 것이 바람직합니다.

+0

거의 사용되지는 않지만 일회성의 문제가 아니지만 첨단 옵션이므로 추가하고 싶습니다 ... 그리고 btw 다른 테이블과 연결되어 있지만 "업데이트"를 수행 할 대상을 지정할 수 있습니까? – lKashef

관련 문제