【发布时间】:2016-08-18 16:05:36
【问题描述】:
我有一个名为 TaxLots 的表,它是使用这些列创建的:
CREATE TABLE Portfolio.TaxLots
(
Ticker varchar(22) NOT NULL,
SecurityDescription varchar(50) NOT NULL,
Class varchar(15) NULL,
Ccy varchar(5) NULL,
LSPosition char(3) NULL,
Date date NULL,
Quantity int NULL,
LocAvgCost decimal(8,3) NULL,
LocTaxCostBasis int NULL,
LocMktVal int NULL,
BaseAvgCost decimal(8,3) NULL,
BaseTaxCostBasis int NULL,
BaseMktVal int NULL,
BaseUNRL int NULL,
DateCreated DATE NOT NULL DEFAULT Cast(GetDate() as Date)
)
GO
我想创建一个函数,该函数将为最后一个 DateCreated 的特定 Ticker(这将是我的参数)提取其中的一些列。我创建了以下函数:
USE FundDB
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION dbo.GetTaxLots
(
@Ticker varchar
)
RETURNS TABLE
AS
RETURN
(
SELECT
TL.Ticker,
TL.SecurityDescription,
TL.LSPosition,
TL.Date,
TL.Quantity,
TL.LocAvgCost,
TL.LocTaxCostBasis,
TL.BaseAvgCost,
TL.BaseTaxCostBasis,
TL.DateCreated,
(SELECT SUM(Quantity)
FROM
Portfolio.TaxLots) AS TotalQuantity
FROM
Portfolio.TaxLots TL
WHERE
TL.DateCreated= (SELECT Max(TL.DateCreated) FROM Portfolio.TaxLots TL)
AND TL.Ticker = @Ticker
)
我用 Ticker 硬编码测试了 SELECT 语句本身,它给出了我想要的结果,但是当我尝试使用这样的 SELECT 语句来使用该函数时:
USE FundDB
SELECT *
FROM dbo.GetTaxLots('MSFT')
GO
我得到空行。很迷茫。我对此很陌生,所以我觉得我错过了一些明显的东西。
【问题讨论】:
标签: sql-server tsql inline-table-function