Как стать автором
Обновить

Комментарии 7

Во всех ваших примерах динамический T-SQL вообще не нужен. Для выполнения запросов с разными параметрами сгодится обычная хранимая процедура.
Для примера я взял очень, очень простые запросы. Я же не буду здесь же приводить примеров запросов по нескольку сотен и тысяч строк, где я это использую на практике.
А вот про построение сложных запросов с практическим применением я расскажу в следующих статьях. Для затравки: использование списка условий.
можно добавить про использование uniqueidentifier в dynamic sql
CAST(NEWID() AS NVARCHAR(36))
В любом случае, для написания параметризированных динамических запросов лучше использовать sp_executesql, а не execute. Тогда вы сможете явно указать типы переменных и защититесь от SQL-инъекций. У вас пропадут проблемы со строками, датами, числами и их округлением + кеширование заработает.

declare @i int 
declare @paramDefinition nvarchar(500) = '@num int';
declare @sql nvarchar(100) = 'select @num'

EXECUTE sp_executesql @sql, @paramDefinition, @num = @i -- NULL не приводит к ошибке
Правильный код для п.5 (про кавычки в строках)

declare @s varchar(100) = 'Number ''1'' '
declare @paramDefinition nvarchar(500) = '@str varchar(100)';
declare @sql nvarchar(100) = 'select String = @str'

EXECUTE sp_executesql @sql, @paramDefinition, @str = @s
Вот sp_executesql — это правильно
Иначе как раз и будут проблемы и со строками и т.д.

А для простых примеров зачастую и не нужно никаких динамических запросов. Только в случае когда сложный отбор по большому кол-ву условий, которые могут быть заданы, а могут быть и не заданы

Век живи, век учись. )) спасибо.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации