다음을 통해 공유


Transact-SQL 디버깅 제한 사항

이 항목은 다음 제품에 적용됩니다.

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional

Visual Studio Express

kkyhd4yb.DoesApplybmp(ko-kr,VS.100).gif kkyhd4yb.DoesApplybmp(ko-kr,VS.100).gif kkyhd4yb.DoesApplybmp(ko-kr,VS.100).gif kkyhd4yb.DoesNotApplybmp(ko-kr,VS.100).gif

Visual Studio 디버거 및 SQL Server 2005 이상 버전의 SQL Server를 사용하여 Transact-SQL을 디버깅하는 경우 많은 일반적인 제한 사항을 고려해야 합니다. SQL Server Management Studio를 사용하여 Transact-SQL을 디버깅하는 방법은 Transact-SQL 디버거 사용을 참조하십시오.

다중 계층 SQL 디버깅

  • 다중 계층 응용 프로그램을 디버깅하는 경우 한 단계씩 코드 실행을 통해 응용 프로그램 계층의 코드(C#, Visual Basic 또는 C++)에서 SQL Server 인스턴스의 코드(Transact-SQL 또는 SQL/CLR)로 전환하여 코드를 한 단계씩 실행할 수 없습니다.대신, 저장 프로시저 코드에 중단점을 설정하고 계속(F5)을 눌러 코드를 중단점까지 실행합니다.중단점을 사용하지 않고 커서까지 실행을 사용하여 원하는 지점까지 실행할 수도 있습니다.SQL Server 계층 내에서는 Transact-SQL 및 SQL/CLR 코드를 임의 방향으로 전환하여 코드를 한 단계씩 실행할 수 있습니다.

  • 또한 반대 방향, 즉 저장 프로시저 코드에서 해당 저장 프로시저를 호출한 계층의 코드로 전환하여 코드를 한 단계씩 실행할 수는 없습니다.응용 프로그램 계층으로 돌아간 후 디버깅을 계속하려면 저장 프로시저가 호출된 지점 뒤의 응용 프로그램 코드에 중단점을 설정합니다.

  • 연결 풀링은 성능을 향상시키는 방법 중 하나입니다.응용 프로그램이 데이터 연결을 닫을 때 SQL Server 연결은 완전히 닫히지 않고 응용 프로그램이 나중에 연결을 다시 열 경우 다시 사용할 수 있는 풀에 보관됩니다.그러나 연결 풀링을 통해 다시 연결하는 경우에는 Transact-SQL 디버깅이 사용하도록 다시 설정되지 않습니다.

    디버깅하는 동안 일시적으로 연결 풀링을 사용하지 않도록 설정해야 합니다.이 작업을 수행하려면 SQL Server 인스턴스 연결에 사용되는 연결 문자열에 "Pooling=false"를 설정합니다.디버깅을 마칠 때 연결 문자열에서 이 특성을 제거하면 기본적으로 풀링이 사용하도록 설정됩니다.

  • 관리되는 응용 프로그램은 .NET Framework Data Provider for SQL Server를 사용하여 SQL Server 데이터 소스에 연결할 수 있습니다. 이 경우 OLE DB 또는 ODBC를 사용하여 연결할 때보다 성능이 향상됩니다.같은 디버거 세션에서 관리되는 디버깅과 Transact-SQL 디버깅을 모두 수행할 수 있습니다.

    관리되는 응용 프로그램이 실행되고 있으며 디버거를 사용하여 응용 프로그램에 연결하는 경우 수행할 디버깅 종류를 선택할 수 있습니다.Transact-SQL 디버깅을 수행하려면 Transact-SQL 디버깅을 선택해야 하고, SQL/CLR 코드를 디버깅하려면 관리되는 디버깅도 지정해야 합니다.

  • 실행 중인 응용 프로그램에 연결한 후 Transact-SQL 디버깅을 수행할 수 있습니다.그러나 연결을 완료한 후에 만든 데이터베이스 연결만 디버깅할 수 있습니다.따라서 응용 프로그램에서 시간이 오래 걸리는 저장 프로시저를 호출하는 경우 저장 프로시저를 호출한 연결에는 연결할 수 없고 응용 프로그램에 연결한 후 저장 프로시저를 호출하는 새 연결에만 연결할 수 있습니다.

  • OleDbDataAdapter를 사용한 연결을 통해 디버깅하는 경우 중단점을 적중한 후 오랫동안 기다리면 연결 시간이 초과됩니다.이 시간 초과 후에 디버그 메뉴에서 계속을 선택하는 등의 방법으로 디버깅을 계속하려고 하면 디버거가 계속 실행되지 않고 종료됩니다.이것은 예상된 동작입니다.디버거가 종료되는 것은 SqlDataAdapter와 달리 OleDbDataAdapter는 시간 초과가 발생할 때 예외를 throw하지 않기 때문입니다.이 문제를 해결하려면 OleDbDataAdapter를 사용하는 경우 시간 제한 값을 큰 값으로 설정합니다.

    .NET Framework 데이터 공급자에 대해 시간 제한 값을 설정하는 방법은 .NET Framework 클래스 라이브러리 설명서의 OleDbCommand.CommandTimeout 속성SqlCommand.CommandTimeout 속성을 참조하십시오.

기타 제한 사항

  • 트리거를 디버깅하려면 먼저 발생시켜야 합니다. 트리거를 직접 디버깅할 수는 없습니다.대신 트리거를 발생시킬 저장 프로시저에서 디버깅을 시작합니다.

  • 런타임 디버깅에서 일련의 하위 SELECT(예: 공용 구조체)가 netbuffer를 채울 수 있습니다.이로 인해 정상적으로 실행되는 코드가 디버깅하는 동안 중지될 수 있습니다.추가 데이터를 가져오려면 RecordSet.MoveNext 및 RecordSet.NextRecordSet을 사용합니다.

  • 저장 프로시저 이름에 따옴표가 포함되어 있으면 디버거 오류 메시지가 표시될 수 있습니다.자세한 내용은 이름에 따옴표가 있는 프로시저를 디버깅할 때 오류 발생을 참조하십시오.

  • 캐시된 값은 자동으로 수정되지 않습니다.Transact-SQL 인터프리터에 캐시된 지역 또는 매개 변수의 변경 내용이 Transact-SQL 문의 코드를 한 단계씩 실행하는 기간 동안 항상 적용되지는 않습니다.값을 수정했다고 해도 값이 다시 확인되지 않을 수 있습니다.캐시된 값을 강제로 새로 고칠 수는 없습니다.캐시된 값이 사용되는 것은 SQL Server 실행 계획에서 일부 변수 값이 각 문 실행이나 참조에 대해 동적으로 로드되지 않도록 하기 때문입니다.자세한 내용을 보려면 SQL Server 설명서에서 "SHOWPLAN"을 검색하십시오.

  • 저장 프로시저를 디버깅하는 동시에 네이티브 SQL Server 프로세스에 연결할 수는 없습니다.

참고 항목

개념

Transact-SQL 디버깅

디버거 명령 및 기능의 제한 사항

관련 자료

Debugger Security