We all know that AX2009 uses cursors extensively – simply executing a SQL statement in SSMS doesn’t always result in the same query plan being used that an AX generated SQL statement would use.
Want to run a query in SQL Management Studio exactly how Dynamics AX 2009 runs the query e.g. as a API Cursor so you can ensure you are looking at the same query plan AX has used then run the query below.
Simply replace the red text below with all the query variables and replace the blue text with your parameters and execute the full statement and voila you can view the exact query plan AX uses to execute the statement.
TIP: If your unsure of the variables to declare in the cursor you can find them by doing a SQL Profiler Trace.
———————————————-
— Normal FFO Cursor
———————————————-
— Script taken from AX Dynamics Performance Analyzer scripts by Rod HansenĀ (http://code.msdn.com/dynamicsperf)
declare @p1 int
set @p1=NULL
declare @p2 int
set @p2=0
declare @p5 int
—
— Fast Forward(16)+Parameterized(4096)+AutoFetch(8192)+AutoClose(16384)
—
set @p5=16+4096+8192+16384
declare @p6 int
set @p6=8193
declare @p7 int
—
— Number of Rows for AutoFetch.
— This is calculated by Maximum Buffer Size (24K default) / Row Length
—
set @p7=4
exec sp_cursorprepexec @p1 output,@p2 output,N’@P1 nvarchar(5),@P2 nvarchar(21)‘,N’SELECT A.SALESID,A.RECID FROM SALESLINE A WHERE ((DATAAREAID=@P1) AND (SALESID>@P2))’,@p5 output,@p6 output,@p7 output,N’ceu’,N’SO-100004′
— @p2 contains cursor handle for fetch call
exec sp_cursorfetch @p2,2,1,@p7