CREATE FUNCTION [dbo].[fn_InventoryPositionSet]
(
@PointInTime DATETIME,
@EOD BIT,
@AccountList Varchar(max)
)
RETURNS @OffersTable TABLE
(
Account VARCHAR(10),
PositionId VARCHAR(150),
VersionDate DATETIME,
ProductType VARCHAR(50),
XRef VARCHAR(50),
XRefType VARCHAR(20),
Desk VARCHAR(50)
)
AS
BEGIN
IF @EOD = 1
SET @PointInTime = dbo.COBTimestamp(@PointInTime)
IF @AccountList is not NULL
INSERT INTO @OffersTable
SELECT
P.Account,
P.UniquePositionId AS [PositionId],
P.Desk,
P.VersionEffective AS [VersionDate],
P.ProductType,
P.XRef,
P.XRefType
FROM MarkingInventory AS P WITH(nolock)
LEFT JOIN
Spirit.dbo.GetTableOfInputs(@AccountList) A
ON
(
(P.Account = A.Input)
AND
@AccountList IS NOT NULL
)
WHERE
@PointInTime >= P.VersionEffective AND @PointInTime < P.VersionExpiration and P.Account = A.Input
ELSE
INSERT INTO @OffersTable
SELECT
P.Account,
P.UniquePositionId AS [PositionId],
P.Desk,
P.VersionEffective AS [VersionDate],
P.ProductType,
P.XRef,
P.XRefType
FROM MarkingInventory AS P WITH(nolock)
WHERE
@PointInTime >= P.VersionEffective AND @PointInTime < P.VersionExpiration
RETURN
END
3つのパラメーターを受け取るこの関数を作成しました。この関数の実行に関していくつか質問があります。
文字列から日付や時刻を変換するときに変換に失敗しました
これは、この関数を次のように実行しようとしたときに受け取るエラーです。
select * from [dbo].[fn_InventoryPositionSet] (GETDATE(), 1, null)
2012-03-10
代わりに合格しても失敗するgetdate()
また、リスト形式でパラメーターを渡す方法についても学びたいと思います。パラメータの1つがリストの形式であるため。関数についてさらに情報が必要な場合はお知らせください。
これは、上記の関数で使用される関数です。
CREATE FUNCTION [dbo].[COBTimestamp]
(
@COBDate DATETIME
)
RETURNS DATETIME
AS
BEGIN
RETURN DATEADD(day, DATEDIFF(day, 0, @COBDate), '23:59:59')
END
GO