Согласно DMV, да, http://msdn.microsoft.com/en-us/library/ms189747.aspx, но для подтверждения мне нужно будет выполнить тест.
Идентификатор объекта в выходных данных - это «идентификатор объекта (например, хранимой процедуры или пользовательской функции) для этого плана запроса».
Протестировал и да, похоже, они получают отдельную запись кэша плана.
Тестовый скрипт:
create function foo (@a int)
returns int
as
begin
return @a
end
Самые основные из созданных функций.
-- clear out the plan cache
dbcc freeproccache
dbcc dropcleanbuffers
go
-- use the function
select dbo.foo(5)
go
-- inspect the plan cache
select * from sys.dm_exec_cached_plans
go
Затем в кеше плана есть 4 записи, одна из которых указана как objtype = Proc - это кэш плана функции, возьмите ручку и откройте ее.
select * from sys.dm_exec_query_plan(<insertplanhandlehere>)
Первым adhoc в моем тесте был фактический запрос, 2-ым ad-hoc был запрос с запросом кеша плана. Таким образом, он определенно получил отдельную запись под другим типом процедуры, к которой отправляется запрос adhoc. Дескриптор плана также отличался, и при извлечении с использованием дескриптора плана он возвращает идентификатор объекта в исходную функцию, в то время как запрос adhoc не предоставляет идентификатор объекта.