【发布时间】:2023-03-25 06:30:01
【问题描述】:
来自lobodava 的动态 SQL 查询是:
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
--或
执行 (@sql)
为什么 lobodava 选择 exec sp_executesql @sql 而不是 exec(@sql)
那么这里有什么区别呢?
使用sp_executesql on recursive dynamic queries会更好吗?
在其他帖子中,他们说sp_executesql 更有可能促进查询计划重用......
那么它对这类查询有帮助吗?
【问题讨论】:
标签: sql sql-server tsql sql-server-2008 dynamic-sql