簡體   English   中英

從SQL Server中的存儲過程調用函數

[英]Call function from stored procedure in SQL Server

功能:

  ---------Declarations
  DECLARE @OpStartTime datetime,
          @OpEndTime datetime,
          @OpRoomID uniqueidentifier,
          @OpRoomSortOrder int,
          @OpRoom varchar(200),
          @DayStartTime datetime,
          @DayEndTime datetime,
          @LastStartTime datetime,
          @LastEndTime datetime,
          @Count int

  SELECT @Count = 0

  DECLARE vendor_cur CURSOR FOR
      SELECT 
          @OperationStartTime, @OperationEndTime, @OperationRoomID,
          @OperationRoomSortOrder, @OperationRoom, 
          @StartWorkingDateTime, @EndWorkingDateTime

  OPEN vendor_cur

  FETCH NEXT FROM vendor_cur
  INTO @OpStartTime, @OpEndTime, @OpRoomID, @OpRoomSortOrder, @OpRoom, @DayStartTime, @DayEndTime

  WHILE (@@FETCH_STATUS = 0)
  BEGIN
      SET @Count = @Count + 1

      IF @Count = 1
      BEGIN
          INSERT INTO @ResultList 
              SELECT @OpRoomID, @OpRoomSortOrder, @OpRoom, @DayStartTime, @OpStartTime
      END
      ELSE
      BEGIN
          INSERT INTO @ResultList  
              SELECT @OpRoomID, @OpRoomSortOrder, @OpRoom, @LastEndTime, @OpStartTime
      END

      SET @LastStartTime = @OpStartTime
      SET @LastEndTime = @OpEndTime

      FETCH NEXT FROM vendor_cur INTO @OpStartTime, @OpEndTime, @OpRoomID, @OpRoomSortOrder, @OpRoom, @DayStartTime, @DayEndTime
  END

  INSERT INTO @ResultList 
      SELECT @OpRoomID, @OpRoomSortOrder, @OpRoom, @LastEndTime, @DayEndTime

  CLOSE vendor_cur
  DEALLOCATE vendor_cur

  RETURN

存儲過程:

-- Declarations
DECLARE @ResultList TABLE 
                    (
                         RowId INT IDENTITY (1, 1) NOT NULL,
                         OrRoomId UNIQUEIDENTIFIER,
                         OrRoomSortOrder INT,
                         OrRoom VARCHAR(200),
                         aStartTime DATETIME,
                         aEndTime DATETIME
                    )

  DECLARE
    @OST DATETIME,
    @OET DATETIME,
    @ORID VARCHAR(50),
    @ORroom VARCHAR(200),
    @ORSO INT,
    @ODSWDT DATETIME,
    @ODEWDT DATETIME

WHILE (@Date < @EndDate)
BEGIN
    SET @Date = @Date + 1

    SELECT
        @OST = Tblbooking.StartTime,
        @OET = Tblbooking.EndTime,
        @ORID = CTblOperationRoom.OperationRoomID,
        @ORroom = CTblOperationRoom.Code,
        @ORSO = CTblOperationRoom.SortOrder,
        @ODSWDT = DATEADD(HOUR, @StartWorkingHour, DATEDIFF(dd, 0, Tblbooking.StartTime)),
        @ODEWDT = DATEADD(HOUR, @EndWorkingHour, DATEDIFF(dd, 0, Tblbooking.EndTime))
    FROM
        OTS.TblBooking TblBooking 
    INNER JOIN 
        CSV.CTblOperationRoom CTblOperationRoom ON TblBooking.OperationRoomFK = CTblOperationRoom.OperationRoomID
    WHERE
        (@InstitutionID IS NULL OR CTblOperationRoom.InstitutionFK = @InstitutionID)
        AND (CONVERT(VARCHAR(10), CONVERT(DATE, TblBooking.StartTime, 105), 23) = @Date) 
        OR (CONVERT(VARCHAR(10), CONVERT(DATE, TblBooking.EndTime, 105), 23) = @Date)
        AND TblBooking.EndTime BETWEEN @OpStartTime AND @OpEndTime 
         OR TblBooking.StartTime BETWEEN @OpStartTime AND @OpEndTime
        AND ((@OperationRoomIDKey IS NULL) OR (TblBooking.OperationRoomFK = @OperationRoomIDKey))
      ORDER BY 
          Tblbooking.StartTime ASC

  --here is the code when I want to call the function
  INSERT INTO @ResultList 
      SELECT [OTS].[Function](@OST, @OET, @ORID, @ORroom, @ORSO, @ODSWDT, @ODEWDT) 

  IF(@Date = @EndDate)
      BREAK
END

SELECT * FROM @ResultList

實際上,我想調用此存儲過程以獲取日期范圍之間的會話時間。 但是,當我調用存儲過程時遇到了這個問題。

這是我得到的錯誤:

找不到“ OTS”列或用戶定義的函數或聚合“ OTS.Func_VTblAvailableSlot_SessionTime”,或者名稱不明確。

有沒有人可以幫助您!

您可以嘗試以下方法:

INSERT INTO @ResultList SELECT * from [OTS].dbo.[Function] 
(@OST,@OET,@ORID,@ORroom,@ORSO,@ODSWDT,@ODEWDT)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM