«Динамический SQL» относится к программному построению строки SQL-запроса.Например, добавление объединений, создание предложения where и т. Д.
Параметризованные запросы - это строки запросов SQL, которые содержат переменные, значения которых предоставляются отдельно от строки запроса SQL.
Ни один изваши примеры соответствуют этим описаниям, потому что они оба являются простыми вызовами T-SQL в хранимых процедурах.
Это может показаться педантичным, но если ваше приложение вызывает 'EXEC [dbo].[my_really_special_sp] @varchar1 @varchar2'
, то означает, что является параметризованным запросом.
А если ваш SP вызывает sp_executesql 'EXEC [dbo].[my_really_special_sp] @var1 @var2', @var1 = 1, @var2 = 10
, тогда ...
sp_executesql
- это вызов T-SQL 'EXEC [dbo].[my_really_special_sp] @var1 @var2'
- ваш параметризованный запрос @var1 = 1, @var2 = 10
- ваши параметры
Важным моментом является то, что ваши примеры - это предварительно скомпилированные операторы в SP.Примеры, которые я пытался объяснить, это строки , которые передаются на SQL Server для анализа, компиляции и выполнения.
Если эта строка составлена программно по частям, это динамический sql.
Если эта строка содержит ссылки на переменные, которые предоставляются отдельно, она параметризируется.
Я надеюсь, что это помогает, хотя я вижу, что это может показаться субъективным.
Что касается вашего стиля программирования.Ваш второй SP имеет незначительную «уязвимость», заключающуюся в том, что если у пользователя есть доступ к нему, он имеет доступ ко всем другим SP с такой же подписью, даже если этот пользователь изначально не имеет доступа.Это может быть преднамеренным, и / или вы можете проверить параметр @spname, чтобы закрыть уязвимость.Кроме этого, я не вижу ничего, что могло бы быть ошибочным.