我在弄清楚如何摆脱错误时遇到了问题。它说 Begin 语句附近有错误的语法。我想它是以前的意思,但我不知道是什么。我尝试了许多不同的函数声明,但没有让它工作。
我的表格在流程的每个步骤中都有一行,用于多个流程。该函数应采用进程名称(单位)和时间,并应生成该进程从开始到结束的所有行。
在没有函数的情况下执行 sql 工作正常。
CREATE FUNCTION [GetFullCIP]
(
@pTime DATETIME2,
@pName NVARCHAR(50)
)
RETURNS TABLE
AS
BEGIN
DECLARE @cipid int
SELECT TOP(1) @cipid=unit_id FROM [dbo].[md_units] WHERE unit=@pName
DECLARE @stop Datetime2;
DECLARE @start Datetime2;
--start
SELECT TOP (1) @start=[begin_date] FROM [dbo].[log] WHERE [operation_id]=1 AND unit_id=@cipid AND [begin_date] <=@pTime ORDER BY [cip_id] DESC
--stop
SELECT TOP (1) @stop=[inserted_date] FROM [dbo].[log] WHERE [operation_id]=99 AND unit_id=@cipid AND [inserted_date]>=@pTime ORDER BY [cip_id] ASC
RETURN (SELECT * FROM [dbo].[log] WHERE unit_id=@cipid AND [begin_date]>=@start AND [inserted_date]<=@stop)
END
GO
我读到我应该给返回表一个名字,比如@resdata。我试过了,最后写了 SET @resdata=(SELECT ...) 但这不起作用,因为它不再知道@resdata。
提前谢谢