Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 в хранимке есть не существующая таблица, при этом она компиллируется  [new]
хранимка и я
Guest
Сабж.
Похоже, что-то в настройках среды задано.
Как поменять?
12 мар 14, 13:19    [15709870]     Ответить | Цитировать Сообщить модератору
 Re: в хранимке есть не существующая таблица, при этом она компиллируется  [new]
Glory
Member

Откуда:
Сообщений: 104760
хранимка и я
Как поменять?

Никак. Это называется отложенное разрешение имен.
12 мар 14, 13:22    [15709899]     Ответить | Цитировать Сообщить модератору
 Re: в хранимке есть не существующая таблица, при этом она компиллируется  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Позанудствую.

Она не сколько компилится, сколько парсится, а компилится перед самим вызовом каждой команды (если не было в кеше планов).
Парсится конечно до правильности имён колонок, если есть таблы/представления.

Но пусть меня поправят, если есть нюансы.
12 мар 14, 18:50    [15712742]     Ответить | Цитировать Сообщить модератору
 Re: в хранимке есть не существующая таблица, при этом она компиллируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
хранимка и я
Сабж.
Похоже, что-то в настройках среды задано.
Как поменять?


а что показывает sp_recompile?
12 мар 14, 20:04    [15713162]     Ответить | Цитировать Сообщить модератору
 Re: в хранимке есть не существующая таблица, при этом она компиллируется  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Winnipuh
а что показывает sp_recompile?


А что она может показывать?
12 мар 14, 20:40    [15713325]     Ответить | Цитировать Сообщить модератору
 Re: в хранимке есть не существующая таблица, при этом она компиллируется  [new]
o-o
Guest
Mnior
Позанудствую.

Она не сколько компилится, сколько парсится, а компилится перед самим вызовом каждой команды (если не было в кеше планов).
Парсится конечно до правильности имён колонок, если есть таблы/представления.

Но пусть меня поправят, если есть нюансы.


наверное все потому, что кто-то под компиляцией понимает "сохранение кода",
в то время как под компиляцией понимается построение плана.
при сохранении кода -- да, парсится + происходит "частичное разрешение имен": partial name resolution.
приведу цитату на инглише, все объясняет + автор цитаты уважаемый товарищ: Erland Sommarskog

When you enter a stored procedure with CREATE PROCEDURE (or CREATE FUNCTION for a function or CREATE TRIGGER for a trigger), SQL Server verifies that the code is syntactically correct, and also checks that you do not refer to non-existing columns. (But if you refer to non-existing tables, it lets get you away with it, due to a misfeature known as deferred named resolution.) However, at this point SQL Server does not build any query plan, but merely stores the query text in the database.

It is not until a user executes the procedure, that SQL Server creates the plan. For each query, SQL Server looks at the distribution statistics it has collected about the data in the tables in the query. From this, it makes an estimate what is best way to execute the query. This phase is known as optimisation. While the procedure is compiled in one go, each query is optimised on its own, and there is no attempt to analyse the flow of execution.This has a very important ramification: the optimizer has no idea about the run-time values of variables. However, it does know what values the user specified for the parameters to the procedure.

How SQL Server Generates the Query Plan
13 мар 14, 13:19    [15716921]     Ответить | Цитировать Сообщить модератору
 Re: в хранимке есть не существующая таблица, при этом она компиллируется  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
o-o
наверное все потому, что кто-то под компиляцией понимает "сохранение кода"
Часто видел что ошибочно думают именно компиляцию, словно всё компилится только на момент сохранения. И о кеше планов даже не подозревают и других механизмах и побочных явлениях.

Имхо вся путаница от MS, надо было писать как есть сразу. Постоянно всякая хрень в описаниях, и не всегда в маркетологах дело.
13 мар 14, 22:46    [15720682]     Ответить | Цитировать Сообщить модератору
 Re: в хранимке есть не существующая таблица, при этом она компиллируется  [new]
o-o
Guest
Mnior,
мы, кажись, об одном и том же, просто я в последнее время
"плохо говорить по-русски"
я про то, как жмут F5 после написания кода,
и вот это почему-то называют "компиляцией", в то время как это просто сохранение текста в базе.
в то время как to compile a stored procedure is to optimise and build a query plan
13 мар 14, 23:07    [15720781]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить