2013-03-10 2 views
2
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()

Я также хочу узнать, как передавать параметры в виде списка. Поскольку один из параметров представлен в виде списка. Сообщите мне, хотите ли вы получить дополнительную информацию о функции.

Это функция, которая используется в функции, написанной выше:

CREATE FUNCTION [dbo].[COBTimestamp] 
(
    @COBDate DATETIME 
) 
RETURNS DATETIME 
AS 
BEGIN 

    RETURN DATEADD(day, DATEDIFF(day, 0, @COBDate), '23:59:59')    

END 
GO 
+0

'23: 59: 59' это не может быть преобразована к 'DATETIME'. Также верните теги. –

+0

Исправлены теги. Посмотрите на свое объяснение. Спасибо – user2087822

+0

'PL/SQL' не имеет функции' DATEADD'. Я предполагаю, что вы используете 'SQL Server'. –

ответ

0

Посмотрите на ваше определение таблицы:

1. Account   VARCHAR(10), 
2. PositionId   VARCHAR(150), 
*** 3. VersionDate  DATETIME, *** 
4. ProductType  VARCHAR(50), 
5. XRef    VARCHAR(50), 
6. XRefType   VARCHAR(20), 
7. Desk    VARCHAR(50) 

И ваш SELECT:

  SELECT  
       1. P.Account, 
       2. P.UniquePositionId AS [PositionId], 
       *** 3. P.Desk, *** 
       4. P.VersionEffective AS [VersionDate], 
       5. P.ProductType, 
       6. P.XRef, 
       7. P.XRefType 
+0

Спасибо, Это сработало. Я сделал ошибку в определении таблицы и моем запросе select. – user2087822

0

Проблема не в [dbo].[fn_InventoryPositionSet] он находится в [dbo].[COBTimestamp].

RETURN DATEADD(day, DATEDIFF(day, 0, @COBDate), '23:59:59') 
                ^__________ Must be converted to `DATETIME` 

DATEADD (Transact-SQL)

+0

Вам не нужно прокомментировать ни одной строки, вы должны передать правильный аргумент функции 'DATEADD'. –

+0

Ошибка ''23: 59: 59'' [не представляет проблем] (http://sqlfiddle.com/#!3/d41d8/10699) в SQL Server. –

Смежные вопросы

 Смежные вопросы