2017-05-06 135 views
-1

我已经更新了代码的建议,但现在我得到一个新的错误标量函数:返回地址

--The function 
Create Function udf_GetCustomerAddress 
    (@CustomerID varchar) 
Returns varchar 
As 
Begin 
    declare @CustomerAddress varchar 

    select 
     @CustomerAddress = c.CompanyName, c.Address, c.City, 
     c.StateOrRegion, c.PostalCode, c.CustomerID 
    from 
     Customers c 
    where 
     c.CustomerID = @CustomerID 

    Return @CustomerAddress 
End 

再次感谢在:

Msg 141, Level 15, State 1, Procedure udf_GetCustomerAddress, Line 31
A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.

我的代码粘贴下面提前!

回答

0

您需要一个长度为所有varchar() s - 总是在SQL Server中使用长度。那么你可能想要连接结果。如果我假设所有类型都是字符串。 。 。

Create Function udf_GetCustomerAddress (
    @CustomerID varchar(255) 
) 
Returns varchar(max) 
As 
Begin 
    declare @CustomerAddress varchar(max); 

    select @CustomerAddress = (c.CompanyName + ' ' + 
           c.Address + ' ' + 
           c.City + ' ' + 
           c.StateOrRegion + ' ' + 
           c.PostalCode + ' ' + 
           c.CustomerID 
          ) 
    from Customers c 
    where c.CustomerID = @CustomerID; 

    Return @CustomerAddress; 
End; 

这假定你实际上想要所有的字段都带有一些分隔符。

但是,我不认为这是获得所需功能的最佳方式。最好在表格中添加一个计算列:

alter table Customers c 
    add CustomerAddress as (<expression here>); 
+0

不错!谢谢@Gordon Linoff – user7879707

+0

当我调用函数时,仍然出现错误: Msg 4104,Level 16,State 1,Line 62 多部分标识符“dbo.udf_GetCustomerAddress”无法绑定。 我打这样的功能: select dbo.udf_GetCustomerAddress'company ID'as'Company Address' 有什么想法? – user7879707

+0

@ user7879707。 。 。你应该问另一个问题,并展示如何调用函数。 –

0

你应该RETURNS VARCHAR

Go 
--Address function 
Create Function udf_GetCustomerAddress 
(@CustomerID varchar) 
RETURNS varchar(max) 
As 
Begin 
    declare @CustomerAddress varchar(max); 

    select @CustomerAddress = concat(c.CompanyName, c.Address, c.City, 
    c.StateOrRegion, c.PostalCode, c.CustomerID) 
    from Customers c 
    where c.CustomerID = @CustomerID; 

    Return @CustomerAddress; 
End 

看一看CREATE FUNCTION语法改变Return varchar

+0

Thanks @McNets - thanks it。 – user7879707

+0

除非返回超过8000个字符,否则绝对不想使用varchar(max)。处理地址时不常见。 –