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
我已經創建了此函數,它需要三個參數。我有幾個有關執行此功能的問題。SQL Server函數錯誤 - 從字符串轉換日期和/或時間時轉換失敗
轉換失敗時從字符串轉換日期和/或時間
這是我收到的錯誤,當我嘗試以下方式
select * from [dbo].[fn_InventoryPositionSet] (GETDATE(), 1, null)
執行這種功能,它即使我通過2012-03-10
而不是getdate()
I也想學習如何以列表的形式傳遞參數。作爲參數之一是以列表的形式。讓我知道你是否想要更多關於該功能的信息。
這是其在上述寫入的功能中使用的功能:
CREATE FUNCTION [dbo].[COBTimestamp]
(
@COBDate DATETIME
)
RETURNS DATETIME
AS
BEGIN
RETURN DATEADD(day, DATEDIFF(day, 0, @COBDate), '23:59:59')
END
GO
'23:59:59' 這個不能轉換到'DATETIME'。也正確的標籤。 – 2013-03-10 19:52:01
更正的標籤。將看看你的解釋。謝謝 – user2087822 2013-03-10 20:00:15
'PL/SQL'沒有'DATEADD'功能。我假設你使用'SQL Server'。 – 2013-03-10 20:04:06