我试图创建一个根据区号显示客户名称的功能。
创建了函数,但是我得到的是已知区域代码的空结果,我应该得到很多。
我是一个无知的新手,这可能是一个因素。
alter function ufnGetCustomerByAreaCode(@AreaCode nvarchar(3))
returns nvarchar(100)
as
begin
declare @Customer as nvarchar(100);
set @Customer =
(
select c.FirstName + ' ' + c.LastName
from SalesLT.Address as a
join SalesLT.CustomerAddress as ca
on a.AddressID = ca.AddressID
join SalesLT.Customer as c
on ca.CustomerID = c.CustomerID
where left(a.PostalCode,3) = @AreaCode
)
return @Customer
end
使用命令
选择dbo.ufnGetCustomerByAreaCode(706)
我的结果是空的。该表有很多706区号。
答案 0 :(得分:1)
您正在过滤PostalCode(a.k.a.邮政编码)的左侧3个字符,我认为您打算使用左侧3个电话号码字符,因为这是您找到区号的地方。
此外,您已创建标量函数,因此在更改为区域代码而不是邮政编码后,如果有多个客户使用706区号,则可能会出现以下错误:
“子查询返回的值超过1。当子查询跟随=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。”
如果您想要检索具有特定区号的所有客户,那么您将需要一个表值函数。见http://technet.microsoft.com/en-us/library/ms189294(v=sql.105).aspx
如果您不想返回重复的客户名称,请在函数中的SELECT之后添加DISTINCT。
请注意,从表值函数中选择时,应使用语法
SELECT Customers FROM dbo.ufnGetCustomerByAreaCode('706')
而不是
SELECT dbo.ufnGetCustomerByAreaCode('706')