[英]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.