我遇到了T-SQL與SQL2008(與SQL2000)的差異,這些差異導致我陷入死衚衕。我已經驗證了在創建#TEMP的調用程序和引用它的子sProc之間共享#TEMP表的技術在SQL2008 See recent SO question中仍然有效。爲什麼SQL2008調試器不會進入某個子存儲過程
我的核心問題仍然是一個關鍵的「子」存儲過程,在SQL2000中正常工作,但在SQL2008中失敗(即,子sProc中的FROM子句編碼爲:SELECT * FROM #AREAS A),儘管正在創建#AREAS主叫父母。現在不是發佈代碼片段,而是另一個可能有助於您提出建議的症狀。
我解僱了在SQL管理Studio中的調試器:
EXEC dbo.AMS1 @S1='06',@C1='037',@StartDate='01/01/2008',@EndDate='07/31/2008',@Type=1,@ACReq = 1,@Output = 0,@NumofLines = 30,@SourceTable = 'P',@LoanPurposeCatg='P'
這是一個非常大的存儲過程和關鍵片段是奇怪的是:
create table #Areas
(
State char(2)
, County char(3)
, ZipCode char(5) NULL
, CityName varchar(28) NULL
, PData varchar(3) NULL
, RData varchar(3) NULL
, SMSA_CD varchar(10) NULL
, TypeCounty varchar(50)
, StateAbbr char(2)
)
EXECUTE dbo.AMS_I_GetAreasV5 -- this child populates #Areas
@SMSA = @SMSA
, @S1 = @S1
, @C1 = @C1
, @Z1 = @Z1
, @SourceTable = @SourceTable
, @CustomID = @CustomID
, @UserName = @UserName
, @CityName = @CityName
, @Debug=0
EXECUTE dbo.AMS_I_GetAreas_FixAC -- this child cannot reference #Areas (in 2008 only!)
@StartDate = @StartDate -- secondarily, I cannot STEP INTO this sProc
, @EndDate = @EndDate
, @SMSA_CD = @SMSA_CD
, @S1 = @S1
, @C1 = @C1
, @Z1 = @Z1
, @CityName = @CityName
, @CustomID = @CustomID
, @Debug=0
-- continuation of the parent sProc**
我可以逐步父存儲過程的執行。當我到達上面的第一個孩子的時候,我可以選擇dbo.AMS_I_GetAreasV5或者在其執行過程中執行。當我到達第二個孩子sProc - dbo.AMS_I_GetAreas_FixAC的調用時 - 我試着步入它(因爲那是問題陳述的地方),並且STEP INTO被忽略(即,像STEP OVER那樣對待;但是我知道我按了F11而不是F10)。但是,它已執行,因爲在EXECUTE後控制返回到語句時,單擊繼續以完成執行,並且結果窗口顯示dbo.AMS_I_GetAreas_FixAC(即第二個子)存儲過程中的錯誤。
有沒有一種方法來「預加載」一個sProc,目的是在其條目上設置一個斷點,以便我可以在其中執行執行?
總之,我不知道是否無法進入給定的子進程,可能與此特定子進程無法引用由它的父進程創建的#temp(調用者)相同。