2017-05-06 99 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)。處理地址時不常見。 –