在TSQL中,我需要從給定字段的值對指定客戶端的值進行交叉引用。我們有很多客戶端,每個客戶端的值編碼都是不同的。該數據庫是CRM Dynamics 2011數據庫。爲什麼標量值函數失敗並返回空參數?
我設置了一個標量值函數是這樣的:
[dbo].[fn_GetXRef]
(@Guid uniqueidentifier, @LookupType nvarchar(20),
@OurValue nvarchar(20), @Parm4 nvarchar(20) = null,
@Parm5 uniqueidentifier = null, @Parm6 nvarchar(1) = null,
@Parm7 nvarchar(1) = null)
PARMS 4,5,6和7可以爲空;它們用於一些交叉引用,但不用於其他引用。
如果我運行執行功能外的邏輯,它的工作原理。當我執行該函數時,它返回NULL。
例如:
Select dbo.fn_getXRef('22BF20B1-55F1-E211-BF73-00155D062F00',
'Lookup Type 1', 'Our value', null, null, null, '3')
返回null但拉邏輯該功能的運行和它作爲一個單獨的查詢,並使用相同的輸入參數值,則返回正確的客戶端值。
我沒有看到什麼?
更新:13年12月11日
感謝所有試圖幫助。在研究過程中,我發現了一些看起來比我自己更高效的漂亮代碼,所以我重新編寫了使用該技術的函數,現在它可以工作。它使用OPTION(RECOMPILE):
SELECT @TheirValue = X.carriervalue FROM dbo.Filteredcrossreference X WHERE X.carrier = @CarrierId 和X.lookuptype = @LookupType 和X.ourvalue = @OurValue (@ Parm4 IS NULL OR(X.parm4 = @ Parm4)) and(@ Parm5 IS NULL OR(X.parm5 = @ Parm5)) and(@ Parm6 IS NULL OR(X.parm6 = @ Parm6)) 選項(RECOMPILE)
你能告訴我們UDF的主體嗎? – dazedandconfused
你可以共享(部分)函數'[dbo]。[fn_GetXRef]'的代碼嗎?或者解釋它應該做什麼? – NickyvV
你爲什麼隱藏函數的重要部分,只顯示參數列表?我們在閱讀時並不擅長。 –