Почему LINQ отправляет sp_executesql вместо того, чтобы непосредственно выполнить SQL?

почти в во всех случаях комментарии являются злыми: http://gooddeveloper.wordpress.com/

8
задан usr 1 July 2009 в 13:49
поделиться

5 ответов

Эта нотация позволяет повторно использовать скомпилированный во время выполнения оператор TSQL с другими параметрами; то есть инструкция компилируется только один раз, что повышает эффективность.

11
ответ дан 5 December 2019 в 08:00
поделиться

Это, по крайней мере частично, для повторного использования плана запроса. Он может поместить параметры в строку, что означает, что каждый раз, когда вы запускаете запрос с разными параметрами, анализатор видит его как другой запрос и повторно анализирует его. Но поскольку он выполняется таким образом, план запроса кэшируется, и он может просто вставлять новые переменные каждый раз, когда вы его запускаете.

4
ответ дан 5 December 2019 в 08:00
поделиться

РЕДАКТИРОВАТЬ, ой, я сказал, что параметризация вместо замены параметров, спасибо stephbu

sp_executesql предпочтительнее выполнения, потому что он поддерживает подстановку параметров и имеет тенденцию работать более эффективно.

4
ответ дан 5 December 2019 в 08:00
поделиться

Следует отметить, что он также обеспечивает защиту от SQL-инъекций из-за параметризации. Не могу пожаловаться на этот ...

0
ответ дан 5 December 2019 в 08:00
поделиться

Это отличный вопрос.
Это не совсем ответ, а исследование рассуждений, уже приведенных в других ответах. Не стесняйтесь обновить этот «ответ»

Очевидным ответом было бы « параметризованный кеш запросов ». Однако параметры могут быть так же легко связаны, когда оператор выполняется напрямую , а все еще кэшируется.

Синтаксис и подробности в этой статье MSDN ...

msdn_microsoft_ms175580

Заявления о производительности Я сомневаюсь в отсутствии данных, так как кэш, похоже, одинаков как для прямых запросов, так и для запросов sp_execsql.

Итак, если не те - что это?

0
ответ дан 5 December 2019 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: