Динамический SQL-запрос из lobodava :
declare @sql nvarchar(4000) =
N';with cteColumnts (ORDINAL_POSITION, COLUMN_NAME) as
(
select ORDINAL_POSITION, COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = N'''+ @tableName + ''' and COLUMN_NAME like ''' + @columnLikeFilter + '''
),
cteValues (ColumnName, SumValue) as
(
SELECT ColumnName, SumValue
FROM
(SELECT ' + @sumColumns + '
FROM dbo.' + @tableName + ') p
UNPIVOT
(SumValue FOR ColumnName IN
(' + @columns + ')
)AS unpvt
)
select row_number() over(order by ORDINAL_POSITION) as ID, ColumnName, SumValue
from cteColumnts c inner join cteValues v on COLUMN_NAME = ColumnName
order by ORDINAL_POSITION'
exec sp_executesql @sql
- ИЛИ
exec (@sql)
Почему лободава выбрала exec sp_executesql @sql
, а не exec (@sql)
Итак, что в чем разница?
Лучше ли использовать sp_executesql для рекурсивных динамических запросов
?
В другом сообщении говорится, что sp_executesql
является с большей вероятностью будет способствовать повторному использованию плана запроса ...
Значит, это помогает в таких запросах?