在TSQL中,我需要从给定字段的值到指定客户端的值进行交叉引用。我们有许多客户端,每个客户端的值编码是不同的。 db是CRM Dynamics 2011 db。
我设置了一个像这样的标量值函数:
[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但将逻辑拉出函数并将其作为单独的查询运行,并使用相同的输入参数值返回正确的客户端值。
我没看到什么?
更新:12/11/13
感谢大家的帮助。在研究的过程中,我发现了一些看起来比我自己更有效的漂亮代码,所以我用这种技术重新编写了函数,现在它可以工作了。它使用OPTION(RECOMPILE):
SELECT @TheirValue = X.carriervalue 来自dbo.Filteredcrossreference X. 哪里 X.carrier = @CarrierId 和X.lookuptype = @LookupType 和X.ourvalue = @OurValue 和(@ Parm4 IS NULL OR(X.parm4 = @ Parm4)) 和(@ Parm5 IS NULL OR(X.parm5 = @ Parm5)) 和(@ Parm6 IS NULL OR(X.parm6 = @ Parm6)) 选项(重建)
答案 0 :(得分:0)
很难说,没有看到你的功能的身体。但是,一个常见的地方将是实际传递的parms。有可能,你可能认为你传递的是null,实际上你传递的是一个空字符串,或者是一个默认值,或者沿着这些行传递的东西。