답변:
그렇다면 왜 dbo 아래에 생성 된 접두어 (스키마)없이 함수를 호출 할 수 있습니까?
스칼라 표현식이 사용되는 경우 스칼라 값 함수를 호출 할 수 있습니다. 여기에는 계산 열 및 CHECK 제약 조건 정의가 포함됩니다. EXECUTE 문을 사용하여 스칼라 값 함수를 실행할 수도 있습니다. 스칼라 값 함수는 최소한 함수의 두 부분으로 된 이름을 사용하여 호출해야합니다 .
따라서 이것은 기본적으로 SQL Server 개발 팀이 설정 한 제한 사항이며 상당히 올바른 것으로 간주합니다. 어떻게 든 허용되지만 (대화를 위해서만) 여전히 스키마 접두사를 사용합니다.
스키마 이름을 추가하지 않고 작동하더라도 항상 스키마 이름 사용을 지원합니다. 이것은 모범 사례이며 모든 "좋은"개발자는 아무리 많은 중복이 있어도이를 사용합니다.
내가 보는 또 다른 이유는 데이터베이스 엔진과 같은 시스템 기능 getdate ()
과 사용자 정의 기능 을 구별 할 무언가가 필요하기 때문 입니다. 스키마 이름없이 함수를 호출 할 수있는 경우 데이터베이스 엔진이 Getdate라는 사용자 작성 함수 또는 시스템 GETDATE () 함수를 어떻게 구별 할 수 있습니까?
다른 답변은 이것이 제한이지만 그 이유는 아니라고 설명합니다.
요구 사항이 항상 사실은 아닙니다. 스칼라 UDF를 사용할 수 있으며 EXEC
여전히 암시 적 해상도를 사용합니다 ( 예 )
나는 이것이 이름 충돌을 피하는 것이라고 상상한다.
스키마없이 함수를 참조 할 수 있으면 crypt_gen_random
2000 또는 2005 년에 호출 된 고유 한 함수를 만든 사람 이 2008 년에 내장 함수의 이름이되면서 이후 버전으로 업그레이드하는 데 문제가 발생합니다.
exec
내장 함수를 호출 할 수 없으므로 사용법에 대한 모호함이 없습니다 .