SQL 사용자 정의 테이블 값 테이블 유형 (UDT)은 종속 변수/종속성이있는 경우 삭제할 수 없습니다. 권리. SQL 사용자 정의 테이블 유형 : 매개 변수로 사용하지 않으면 왜 드롭 할 수 있습니까?
하지만, 오늘은 부양 가족이 있더라도 하나가 떨어졌다. 오직 criteria 만 proc 나 func 같은 DB 객체의 매개 변수로 사용해서는 안됩니다. 그것이 PROC 내에서 사용하고, 파라미터가 아니다대로CREATE PROCEDURE Bar
as
BEGIN
DECLARE @Identifier FooUDT
--Some operations on @Identifier
END
GO
FooUDT
CREATE TYPE FooUDT AS TABLE
(
ID int NOT NULL
)
은 삭제 될 수있다. 하지만 다음과 같은 방법으로는 삭제할 수 없습니다. 더 흥미로운 무엇
CREATE PROCEDURE Bar
@Identifier FooUDT readonly
as
BEGIN
--Some operations on @Identifier
END
GO
우리가 종속성을 확인하는 경우 두 경우 모두, 모두가 서로 이름을 표시하는 것입니다. 그러나 전자의 경우는 삭제할 수 있지만 후자는 삭제할 수 없습니다. 이유가 무엇입니까? 또는 나는 무엇인가 놓치고 있냐?
[지연된 이름 확인 (https를로 알려진 T-SQL의 큰 misfeature 종속성 necesarily 최신 없으며, DROP은 더 이상 유효 코드를 작동합니다 : //technet.microsoft.com/ko-kr/library/ms190686). –
@ JeroenMostert : UDT가 다르다. UDT가없고 구문이 올바른 경우에도 proc 파일은 생성되지 않습니다. –
"지연된 컴파일"을 "지연된 이름 확인"으로 변경해서는 안된다는 것을 알고있었습니다. 그러나 아이디어는 동일합니다. 테이블이 아닌 모든 것에 대해 구문이 구문 분석되고 모든 객체가 존재하지 않으면 프로 시저가 작성되지 않습니다. 그러나 컴파일은 여전히 지연되므로 T-SQL을 사용하지 않고도 오브젝트를 삭제할 수 있습니다. 지연된 컴파일은 저장 프로 시저의 메타 데이터에는 적용되지 않으며, 매개 변수로 사용되는 UDT를 삭제할 수없는 이유는 해당 명령문에만 적용됩니다. –