从自定义的T-SQL函数返回Varchar

5
我希望定义一个函数,并且从该函数中返回一个简单的字符串值,函数定义如下:
CREATE FUNCTION getCustomerType (@orderNumber INT)
    RETURNS VARCHAR(30)
AS
Return 
    (
    select custtype from Customer c 
        join order o on o.customerid =  c.customerid
    where o.orderNumber = @orderNumber 
 )
GO

select getCustType(1063609) 

应该返回下单号为#1063609的客户类型,但未能成功


1
你需要对函数调用进行模式限定。 - Martin Smith
2
你说的“失败”是什么意思? - Kermit
1
所以使用 dbo.getCustType 或者正确的模式。 - Martin Smith
你需要像@MartinSmith所说的那样先放置模式的名称。例如dbo.getCustType或者你自定义的模式。 - Lamak
2
如果函数名是getCustomerType,为什么要调用getCustType呢? - Andriy M
显示剩余4条评论
1个回答

12
我会修改您的函数语法如下:

我会修改您的函数语法如下:

CREATE FUNCTION dbo.getCustomerType (@orderNumber INT)
    RETURNS VARCHAR(30)
AS
begin
  declare @custtype varchar(30)
  SET @custtype = (select custtype 
                      from dbo.Customer c 
                      join dbo.[order] o 
                        on o.customerid =  c.customerid
                      where o.orderNumber = @orderNumber)

  return @custtype
end 

当你使用模式(下面是 dbo.)调用函数时,你需要使用:

select dbo.getCustomerType(10636909)

请查看带演示的SQL Fiddle

该函数也可以这样写(感谢@MartinSmith):

CREATE FUNCTION getCustomerType (@orderNumber INT)
    RETURNS VARCHAR(30)
AS
begin
  return (select custtype 
                      from dbo.Customer c 
                      join dbo.[order] o 
                        on o.customerid =  c.customerid
                      where o.orderNumber = @orderNumber)
end 

查看 带演示的 SQL Fiddle


@marc_s 是的,我只是在我的例子中试图进行描述。 - Taryn
@AaronBertrand 感谢您的编辑,我是根据 SQL Fiddle 编写的...显然我没有好好思考.... :) - Taryn
1
@Martin 是的,对于标量函数来说,BEGIN/END是必需的,直到我们有内联标量函数为止。这里提到这样一件事实际上是文档中的一个错误 - Aaron Bertrand
谢谢,这个函数可以放在SELECT子句后作为一个字段吗?例如:select x, y, dbo.getCustomerType(10636909) as z。 - devved
@devved 是的,你可以。由于该函数返回标量/单个值--请参见此演示--http://www.sqlfiddle.com/#!3/46027/1 - Taryn
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接