sys.fn_get_sql(Transact-SQL)
적용 대상: SQL Server
지정된 SQL 핸들에 대한 SQL 문의 텍스트를 반환합니다.
Important
Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요. 대신 sys.dm_exec_sql_text 사용합니다. 자세한 내용은 sys.dm_exec_sql_text(Transact-SQL)를 참조 하세요.
구문
sys.fn_get_sql ( SqlHandle )
인수
SqlHandle
핸들 값입니다. SqlHandle은 기본값이 없는 varbinary(64)입니다.
반환된 테이블
열 이름 | 데이터 형식 | 설명 |
---|---|---|
dbid | smallint | 데이터베이스 ID입니다. 임시 및 준비된 SQL 문의 경우 문이 컴파일된 데이터베이스의 ID입니다. |
objectid | int | 데이터베이스 개체의 ID입니다. 임시 SQL 문의 경우 NULL입니다. |
번호 | smallint | 프로시저가 그룹화된 경우 그룹의 번호를 나타냅니다. 0 = 항목이 프로시저가 아닙니다. NULL = 임시 SQL 문입니다. |
암호화됨 | bit | 개체가 암호화되었는지 여부를 나타냅니다. 0 = 암호화되지 않음 1 = 암호화됨 |
text | text | SQL 문의 텍스트입니다. 암호화된 개체의 경우 NULL입니다. |
설명
sys.dm_exec_requests(Transact-SQL) 동적 관리 뷰의 sql_handle 열에서 유효한 SQL 핸들을 가져올 수 있습니다.
캐시에 더 이상 존재하지 않는 핸들을 전달하면 fn_get_sql 은 빈 결과 집합을 반환합니다. 유효하지 않은 핸들을 전달하면 일괄 처리가 중지되고 오류 메시지가 반환됩니다.
SQL Server 데이터베이스 엔진 8KB보다 큰 문자열 리터럴이 있는 대량 복사 문 및 문과 같은 일부 Transact-SQL 문을 캐시할 수 없습니다. 이러한 문에 대한 핸들은 fn_get_sql을 사용하여 검색할 수 없습니다.
결과 집합의 텍스트 열은 암호를 포함할 수 있는 텍스트에 대해 필터링됩니다. 모니터링되지 않는 보안 관련 저장 프로시저에 대한 자세한 내용은 추적 필터링을 참조하세요.
fn_get_sql 함수는 DBCC INPUTBUFFER 명령과 유사한 정보를 반환합니다. 다음은 DBCC INPUTBUFFER를 사용할 수 없기 때문에 fn_get_sql 함수를 사용할 수 있는 경우의 예입니다.
이벤트에 255자 이상이 있는 경우
저장 프로시저의 가장 높은 현재 중첩 수준을 반환해야 하는 경우 예를 들어 sp_1 sp_2 두 개의 저장 프로시저가 있습니다. sp_1 sp_2 호출하고 sp_2 실행되는 동안 sys.dm_exec_requests 동적 관리 뷰에서 핸들을 가져오는 경우 fn_get_sql 함수는 sp_2 대한 정보를 반환합니다. 또한 fn_get_sql 함수는 가장 높은 현재 중첩 수준에 있는 저장 프로시저의 완전한 텍스트를 반환합니다.
사용 권한
서버에 대한 VIEW SERVER STATE 권한이 있어야 합니다.
예제
데이터베이스 관리자는 다음 예제와 같이 fn_get_sql 함수를 사용하여 문제 프로세스를 진단할 수 있습니다. 관리자가 문제 세션 ID를 식별한 후 관리자는 해당 세션에 대한 SQL 핸들을 검색하고 핸들로 fn_get_sql 호출한 다음 시작 및 끝 오프셋을 사용하여 문제 세션 ID의 SQL 텍스트를 확인할 수 있습니다.
DECLARE @Handle varbinary(64);
SELECT @Handle = sql_handle
FROM sys.dm_exec_requests
WHERE session_id = 52 and request_id = 0;
SELECT * FROM sys.fn_get_sql(@Handle);
GO
참고 항목
DBCC INPUTBUFFER(Transact-SQL)
sys.sysprocesses (Transact-SQL)
sys.dm_exec_requests(Transact-SQL)