2013-11-27 105 views
1

在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)

+3

你能告訴我們UDF的主體嗎? – dazedandconfused

+2

你可以共享(部分)函數'[dbo]。[fn_GetXRef]'的代碼嗎?或者解釋它應該做什麼? – NickyvV

+1

你爲什麼隱藏函數的重要部分,只顯示參數列表?我們在閱讀時並不擅長。 –

回答

0

很難說,沒有看到你的功能的身體。但一個共同的地方,看看什麼樣的參數是實際上通過。有可能,你可能認爲你傳遞null,當你實際上傳遞一個空字符串,或一個默認值,或沿着這些線。