问题:创建一个接受州省的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
答案 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语句的完整返回集。
这里的正确路径是从选择语句开始,该语句返回您需要的内容,然后将其转换为函数。如果没有在基础级别返回数据,那么您还没准备好开始创建函数。