2016-06-30 3 views
3

아래 코드에서 GO, 트랜잭션 및 세미콜론을 사용합니까?'GO', 거래 및 세미콜론 사용

여러 번 별도로 물어 본 질문에 감사드립니다. 그러나 조합하여 사용하는 경우 어려움을 겪고 있으며 어떤 지침에 대해서도 감사 할 것입니다.

이 상황에서 거래를 사용해야하는지 확신 할 수 없습니다. (사람들은 일괄 처리의 첫 번째 문이 아닌 경우 공통 테이블 식 및 서비스 브로커 문 제외)

USE TestingDB 
GO 

DECLARE @CustomerContactID int = 278800 

BEGIN TRANSACTION  

DELETE 
FROM   dbo.CustomerContact 
WHERE   CustomerContact_CustomerContactID = @CustomerContactID; 


DELETE 
FROM   dbo.CustomerContactComs 
WHERE   CustomerContactComs_CustomerContactID = CustomerContactID; 

DELETE 
FROM   dbo.CustomerContactAddress 
WHERE   CustomerContactAddress_CustomerContactID = @CustomerContactID; 

COMMIT TRANSACTION; 
+2

절대적으로 _ 기반. –

+0

두 번째 삭제는'CustomerContactID' 앞에'@'가 없습니다. 이것은 원치 않을 수도 있습니다. – Siyual

+0

삭제 쿼리의 순서가 잘못되었을 수 있습니다. 트랜잭션이 필요한지 여부는 일부 쿼리 만 실행해도 괜찮은지 여부에 달려 있습니다. –

답변

3
  1. 세미콜론은 T-SQL에서 쓸모 필요하지 않습니다. 그래서 사용하고 싶다면 맛의 문제입니다. 그러나 항상 사용하는 것이 좋습니다. (의 첫 번째 두 개의 설명을 참조하십시오.

  2. DELETE 문 순서가 잘못되었습니다. 당신은 먼저 CustomerContactComsCustomerContactAddress과에서 세부 데이터를 삭제할 수있는 CustomerContact

  3. 당신은 당신은 단지 정보의 일부를 삭제할 경우, 예를 방지하려는 경우 트랜잭션이 필요할 수 있습니다 CustomerContactComs 만 가능하지만 나머지는 허용되지 않습니다.

  4. 그러면 바로 GO이됩니다. 트랜잭션의 명령문 사이에 GO 문을 삽입하지 마십시오. GO은 T-SQL의 일부가 아니지만 Management Studio와 같은 도구에 사용됩니다. 은 별도의 일괄 처리을 나타냅니다.
    GO이있는 경우 이전 명령문은 서버에 일괄 처리로 전송됩니다. 일} 처리에서 하나의 명령문이 오류를 발생 시키면 해당 일} 처리의 나머지 명령문은 실행되지 않습니다.
    하지만 여기 GO를 삽입 할 경우, 다음과 같은 문장이 새로운 배치 등 트랜잭션이 될 수있는 이전 문 있지만 최선을 다하고 것 당신이 원하는 아마 인,에 실패했습니다.

+2

좋은 답변에 약간의 추가 (나는 delete 문이 구문이 틀리다라고 생각합니다) : 세미콜론이 (가까운 장래에) 폐기 될 것이라는 것을 이해합니다. 어쨌든 사용을 시작하는 것이 좋습니다. ISO sql이기 때문에 항상 따라야합니다. – HoneyBadger

+2

"세미콜론은 쓸모 없습니다 *"- 그건 틀렸어. 항상 사용하는 것이 좋습니다. 예 : 여기 : http://sqlblog.com/blogs/aaron_bertrand/archive/2012/09/25/16567.aspx –