Wszyscy wiemy, że typy tabel wartości definiowanych przez użytkownika SQL (UDT) nie mogą zostać usunięte, jeśli mają zależności/zależności. Dobrze.Typy tabel definiowane przez użytkownika SQL: Dlaczego możemy je usunąć, jeśli nie są używane jako parametr?
Ale dzisiaj upuściłem jedną, nawet jeśli mają na utrzymaniu. Tylko kryteria nie powinny być używane jako parametry obiektów DB, takich jak proc lub func.
CREATE TYPE FooUDT AS TABLE
(
ID int NOT NULL
)
Zależnie
CREATE PROCEDURE Bar
as
BEGIN
DECLARE @Identifier FooUDT
--Some operations on @Identifier
END
GO
The FooUDT
mogą zostać pominięte, ponieważ jest wykorzystywany wewnątrz Proc i nie jest parametrem. Ale po drodze nie można go zrzucić.
CREATE PROCEDURE Bar
@Identifier FooUDT readonly
as
BEGIN
--Some operations on @Identifier
END
GO
Co bardziej interesujące jest to, że w obu przypadkach, jeśli możemy sprawdzić zależności, zarówno pokaże każdą inną nazwę. Jednak ten pierwszy przypadek można usunąć, ale nie ten drugi. Dlaczego to? Czy może czegoś brakuje?
Prawdopodobnie wielka nieprawidłowość T-SQL, określana jako [rozpoznawanie nazw odroczonych] (https) : //technet.microsoft.com/library/ms190686). –
@JeroenMostert: Z UDT jest inny. Jeśli brakuje UDT i składnia jest poprawna, proc nie jest nawet tworzony. –
Wiedziałem, że nie powinienem zmienić "Odroczonej kompilacji" na "Odroczoną Rozpoznawanie Nazw". Ale idea jest taka sama: dla wszystkiego, co nie jest tabelą, składnia jest przetwarzana, a procedura nie jest tworzona, chyba że istnieją wszystkie obiekty. Ale nadal możesz swobodnie upuszczać te obiekty bez narzekania T-SQL, ponieważ kompilacja jest nadal odroczona. Odroczona kompilacja nie ma zastosowania do metadanych procedury składowanej, tylko do jej instrukcji, dlatego nie można usunąć UDT, jeśli jest używany jako parametr. –