私は小さなストアドプロシージャ(SQl Server 2012)を持っています。奇妙なexecとsp_executesqlが異なる動作
私はそれを使用して実行した場合:
exec spSelRegion @bOver21 = 1
Iゲット私が使用してそれを実行した場合とは異なる結果:
exec sp_executesql N'spSelRegion',N'@bOver21 bit',@bOver21=1
違いは何ですか?
ALTER PROCEDURE [dbo].[spSelRegion]
(
@ID int = NULL
,@Name varchar(128) = NULL
,@OrderBy varchar(16) = 'ID'
,@bOver21 bit = null
)
AS
SELECT distinct
r.[ID],
r.[Name],
r.[dInserted],
r.[sInserted],
r.[dUpdated],
r.[sUpdated],
r.[timestamp]
FROM
[dbo].[tblRegion] r
left outer join tblCountyRegion cr
on r.ID = cr.RegionNbr
WHERE
(r.[ID] = @ID or @ID is null)
AND (r.[Name] = @Name or @Name is null)
AND (@bOver21 is null and r.[ID] >20
OR (@bOver21 = 1 and r.[ID] > 20 and cr.IsActive=1)
OR (@bOver21 = 0 and r.[ID] >= 21 and r.id < 31))
私はこれ以上の補完をしたくありません。しかし、今日のマイクロソフトのアップデート後、いくつかのストアドプロシージャはExecの代わりにsp_executesqlを使用して実行され、これが問題の原因です。
どのような違いがありますか? – SchmitzIT
違いは何ですか?違いを知るためにsql profilerを確認できますか? –