gpt4 book ai didi

sql - exec sp_executesql @sql 和 exec (@sql) SQL Server

转载 作者:行者123 更新时间:2023-12-02 11:14:13 27 4
gpt4 key购买 nike

来自 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 是否更好?
在其他帖子中,他们说 sp_executesql 更有可能促进查询计划重用......那么它对此类查询有帮助吗?

最佳答案

因为 EXEC sp_executesql 会缓存查询计划 - EXEC 不会。有关更多信息和很好的阅读内容,请参阅:

缓存查询意味着查询的逻辑会被临时存储,并使其以后更快地运行查询。

关于sql - exec sp_executesql @sql 和 exec (@sql) SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5255463/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com