2011-02-22 3 views
1

테이블 반환 함수로 구현 된 SQL Server 2008 시스템 동적 관리 뷰를 쿼리하고 빈 결과 집합을 반환하면 빈 결과 집합의 원인이 함수에 오류가 있음을 알 수 있습니까? , 그리고 그 오류는 무엇입니까?SQL Server 테이블 반환 함수가 오류를보고하는 방법은 무엇입니까?

+0

문제를 일으키는 구체적인 사례가 있습니까? – JNK

+0

저장 프로 시저 내에서 오류를 발생시켜 테스트 할 수 있습니다 (다른 오류 수준으로 시도하여 sql 예외가있는 경우와없는 예외를 확인하십시오). – Oded

+0

함수 이름을 나열하고 사용 방법을 더 자세히 말할 수 있습니다. 무엇을 성취하려고합니까? –

답변

3

그렇지 않습니다. T-SQL 함수에서는 THROW 또는 RAISERROR를 사용할 수 없습니다. 일부 devs는 UDF 내부에서 오류를 트리거하기 위해 0으로 나눕니다. 이것은 잘 작동하지만 때로는 어디에도없는 0 오류로 나누기를 조사해야하는 불쌍한 영혼을 혼란스럽게합니다.

+0

나는 고쳐졌다. 하나는 기능을 못쓰게 만들 수 없습니다. –

+0

두 개의 정반대의 대답이 모두 반대표로 쓰여지는 것은 재미 있습니다. 다른 사람들이보고 싶으면 여기에 더 자세한 내용이 있습니다 : http://stackoverflow.com/questions/1485034/how-to-report-an-error-from-a-sql-server-user-defined-function. –

2

0으로 나누기를 수행하는 것보다 TSQL의 함수에서 오류를 발생시키는 것이 훨씬 더 유용합니다. 우리 회사에서하는 일은 문자열 (매우 문제를 설명)을 캐스팅하여 문자열로 변환하는 것입니다.

if @PersonID is null 
    insert into @Result values(@Right, cast('FT_AclGetAccess must never be called with @PersonID null' as int)) 

이이처럼 보이는 응용 프로그램 서버에 오류가 발생합니다 : int 데이터 형식에 '@PersonID 널 (null)로 호출해서는 안됩니다 FT_AclGetAccess '는 VARCHAR 값을 변환 할 때

변환 실패 .

응용 프로그램 서버에서 약간의 문자열 조작을하면 로그 파일에 대해 꽤 제정신이 아닌 오류 메시지가 나타납니다! ;-)

관련 문제