接受一个参数并返回表的UDF

时间:2014-10-15 14:54:31

标签: sql user-defined-functions

问题:创建一个接受州省的UDF并返回相关的销售税率,StateProvinceCode和CountryRegionCode(数据库是AdventureWorks2012)

姓名取代了州议会,因为没有专栏 称为“州省”,“名称”包含所需信息。 这就是我在下面的代码中所做的。

还有另一种方法可以运行吗? 在此表单中,不明确的列名称会一直显示。

CREATE FUNCTION fx_TxSpCr  (@Name Nvarchar(50), 
                            @TaxRate Smallmoney,
                            @StateProvinceCode Nchar(3),
                            @CountryRegionCode Nvarchar(3)
                            )
RETURNS TABLE
AS  
RETURN  (
            SELECT  Name,TaxRate,StateProvinceCode,CountryRegionCode
            FROM    Sales.SalesTaxRate s
            JOIN    Person.StateProvince t
            ON      s.StateProvinceID=t.StateProvinceID
            JOIN    Sales.SalesTerritory u
            ON      t.TerritoryID=u.TerritoryID
            )

SELECT      s.TaxRate,t.StateProvinceCode,u.CountryRegionCode
FROM        fx_TxSpCr
GROUP BY    Name

2 个答案:

答案 0 :(得分:1)

谢谢你们的贡献。这很有效:

CREATE FUNCTION fx_TaxStCtry(@StateProvince nvarchar(50)) 
RETURNS @TaxStCtry TABLE 
(TaxRate SmallMoney not null,
StateProvinceCode Nchar(3) not null ,
CountryRegionCode Nvarchar(3) not null) 
AS 
BEGIN INSERT @TaxStCtry 
SELECT  tr.TaxRat,sp.StateProvinceCode,sp.CountryRegionCode
FROM Person.StateProvince sp 
JOIN   Sales.SalesTaxRate tr 
ON tr.stateprovinceid = sp.stateprovinceid
WHERE   sp.Name=@StateProvince 
RETURN 
END

答案 1 :(得分:0)

模糊性来自于函数中select语句中缺少别名。看起来您正在尝试在函数的执行中使用别名,但它们实际上需要包含在函数本身中。 (例如,所有三个表都有一个" name"列。)

纠正该问题后,您会发现实际上没有使用为功能设置的任何参数。这不一定是包含在其中的select语句的完整返回集。

这里的正确路径是从选择语句开始,该语句返回您需要的内容,然后将其转换为函数。如果没有在基础级别返回数据,那么您还没准备好开始创建函数。