Каковы реальные плюсы и минусы выполнения динамической команды SQL в хранимой процедуре в SQL Server с использованием
EXEC (@SQL)
против
EXEC SP_EXECUTESQL @SQL
?
sql
sql-server
dynamic
Машина золы
источник
источник
В статье Microsoft по использованию sp_executesql рекомендуется использовать
sp_executesql
вместоexecute
оператора.Итак, вывод: не используйте
execute
заявление . Используйтеsp_executesql
.источник
sp_executesql
их нельзя было использовать для заменыexecute
. Возможно, мне следует выразить мысль, которую я пытаюсь подчеркнуть, как: «Используйтеsp_executesql
вместо того,execute
когда это возможно» .В наши дни я бы всегда использовал sp_executesql, все, что на самом деле является оболочкой для EXEC, которая обрабатывает параметры и переменные.
Однако не забывайте о OPTION RECOMPILE при настройке запросов в очень больших базах данных, особенно если у вас есть данные, охватывающие более одной базы данных, и вы используете CONSTRAINT для ограничения сканирования индекса.
Если вы не используете OPTION RECOMPILE, SQL-сервер попытается создать план выполнения «один размер для всех» для вашего запроса и будет запускать полное сканирование индекса при каждом его запуске.
Это намного менее эффективно, чем поиск, и означает, что он потенциально сканирует целые индексы, которые ограничены диапазонами, которые вы даже не запрашиваете: @
источник
выполнить команду
declare @sql varchar (100) set @sql ='select * from #td1' if (@IsMonday+@IsTuesday !='') begin set @sql= @sql+' where PickupDay in ('''+@IsMonday+''','''+@IsTuesday+''' )' end exec( @sql)
источник
int
в динамическом SQL. Обратите внимание, что @sql объявлен какvarchar
ornvarchar