exec sp_executesql @sql et exec (@sql: SQL Server
Une Dynamique de requêtes SQL à partir de lobodava est:
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
--OU
exec (@sql)
Pourquoi lobodava choisir exec sp_executesql @sql
et pas exec(@sql)
Quelle est donc la différence ici?
Est-il préférable d'utiliser sp_executesql on recursive dynamic queries
?
Dans d'autres post qu'ils disent sp_executesql
est plus susceptible de favoriser la réutilisation des plans de requête...
Ça aide dans ce genre de requêtes?
OriginalL'auteur cMinor | 2011-03-10
Vous devez vous connecter pour publier un commentaire.
Parce que
EXEC sp_executesql
cache le plan de requête --EXEC
ne sera pas. Pour plus d'info, et une très bonne lecture, voir:Mise en cache d'une requête signifie que la logistique de la requête sont stockés temporairement, et de rendre l'exécution de la requête plus tard plus rapide pour elle.
sp_executesql
sur ce genre de requête en raison de requêteplan
, droit?Oui,
EXEC sp_executesql
devrait être ce que vous utilisez dans la majorité des cas, lorsque vous devez utiliser dynamic SQL sur SQL Server.OriginalL'auteur OMG Ponies