0

可能重复:
在 TSQL 中强制转换整数并连接到 varchar

我创建了两个标量函数,每个函数都返回uniqueidentifer类型。我需要在执行语句中调用这些过程,但我似乎语法错误。

Exec spModifyProductPropertyValue 
     @PAVID, 
     fnGetPropertyIDbyLabel(@Label7, @USPID, 0, 1), 
     @ProductID, 
     @Value7, 
     fnGetPINID(@7PIN), 
     0, 
     @counter out

我注意到的是,当我单独调用该函数然后传递使用上述调用中上一个调用的输出时,就像这样

Declare
      @PropertyID as uniqueidentifier = null

Select @PropertyID = fnGetPropertyIDbyLabel(@Label7, @USPID, 0, 1)

Exec spModifyProductPropertyValue 
         @PAVID, 
         @PropertyID, 
         @ProductID, 
         @Value7, 
         fnGetPINID(@7PIN), 
         0, 
         @counter out

编译器并没有太多抱怨。这种方法的问题是我最终创建了这么多临时变量(几乎 50 个),这是我想尽量避免的。我将不胜感激任何帮助,以使这个正确请。

4

2 回答 2

0

的语法UDF

expression... function_name(value_1, value_2, ... value_n)...

因此,您只能传递值,而不是表达式。

因为使用函数是一个表达式,在另一个函数的调用中

     Exec spModifyProductPropertyValue 
     @PAVID, 
     dbo.fnGetPropertyIDbyLabel(@Label7, @USPID, 0, 1) as GetPropertyID,  --Expression
     (..)

不可能。

所以,是的,你必须创建变量。但如果所有都是 int,也许你可以创建一个并在每次使用函数时使用它。或者修改你的函数,让它只做两个函数做的事情。

于 2012-09-21T17:44:31.823 回答
-1

您需要所有者前缀:

Exec spModifyProductPropertyValue 
     @PAVID, 
     dbo.fnGetPropertyIDbyLabel(@Label7, @USPID, 0, 1) as GetPropertyID, 
     @ProductID, 
     @Value7, 
     dbo.fnGetPINID(@7PIN) as GetPINID, 
     0, 
     @counter out

Awnser 在这里:选择中的 SQL 用户定义函数

于 2012-09-21T16:45:55.173 回答