exec sp_executesql @sql und exec (@sql) SQL-Server
Einer Dynamischen SQL-Abfrage aus lobodava ist:
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
--ODER
exec (@sql)
Warum lobodava pick exec sp_executesql @sql
und nicht exec(@sql)
Also, was ist hier der Unterschied?
Ist es besser, zu verwenden sp_executesql on recursive dynamic queries
?
In anderen post sagen Sie sp_executesql
ist eher fördern Abfrageplan wiederverwenden...
So hilft es, in diese Art von Abfragen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil
EXEC sp_executesql
wird cache der query-plan -EXEC
nicht. Für mehr info und ein sehr gut zu Lesen, siehe:Caching eine Abfrage bedeutet, dass die Logistik in die Abfrage temporär gespeichert werden, und stellen Sie die Ausführung der Abfrage später schneller für Sie.
sp_executesql
auf diese Art der Abfrage, da der query -plan
, richtig?EXEC sp_executesql
sollte sein, was Sie verwenden in der Mehrzahl der Fälle, wenn Sie dynamisches SQL verwenden auf SQL Server.