我按照建议更新了代码,但现在我收到了一个新错误:
Msg 141,Level 15,State 1,Procedure udf_GetCustomerAddress,Line 31
为变量赋值的SELECT语句不能与数据检索操作结合使用。
我的代码粘贴在下面:
--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
提前再次感谢!
答案 0 :(得分:0)
您应该Return varchar
更改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语法。
答案 1 :(得分:0)
您需要所有varchar()
的长度 - 始终在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>);