1
我有一個與這些列上創建一個表名爲TaxLots:SQL Server 2012中內嵌表值函數返回空行
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
我希望創建一個將拉動一些列的功能特定的Ticker(這將是我的參數)的最後DateCreated。我創建了以下功能:
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
)
我用新浪體育訊北京時間硬編碼測試的SELECT語句本身,它給我想要的結果,但是當我嘗試使用SELECT語句像這樣使用的功能:
USE FundDB
SELECT *
FROM dbo.GetTaxLots('MSFT')
GO
我得到空行。很困惑。我很新,所以我覺得我錯過了一些明顯的東西。
OMG ...太簡單了。謝謝! – MilesToGoBeforeISleep
再次感謝Jamie的旁註。您能否告訴我一個派生表如何提高子查詢的性能? – MilesToGoBeforeISleep
,因爲您不過濾子查詢,它們很可能會很快並且從每行的緩存中拉出來,因此性能可能不會顯着提高,但最好避免在您的選擇或其中可能的位置進行子查詢 – JamieD77