我正在为存储过程创建一个SQL Server单元测试。我已经完成了大部分任务,但是却遇到了错误
TABLE单词附近的语法不正确
来自我自动生成的C#测试方法。我相信我在声明临时表错误。
这是我声明临时表的SQL代码的一部分。
-- Database unit test for dbo.AutoExpireSchedule
DECLARE @RC as INT,
@Docid as VARCHAR(20),
@NextExpTime as DATETIME,
@NextAssignTime as DATETIME,
@Appr as INT,
@IsManualAssign as BIT,
@preparer as INT,
@status as VARCHAR(5),
@curTime as DATETIME,
@Approut as INT,
@date1 as DATETIME,
@date2 as DATETIME,
@nextExpDate as DATETIME,
@nextAssignDate as DATETIME,
@gap as INT,
@RejectedCount as INT,
@TotalReqdAssnCnt as INT,
@folder as VARCHAR(20),
@DfltAppr as INT,
@AppInstID as INT,
@tempTable as TABLE (id INT identity(1, 1), @DocId, @NextExpTime, @NextAssignTime, @Appr, @IsManualAssign),
@NO_RESPONSE_FROM_PROVIDER as INT = 3;
我也尝试过:
@tempTable as TABLE (id INT identity(1, 1), DocId int, NextExpTime datetime, NextAssignTime datetime, Appr int, IsManualAssign bit),
@EDIT:
我意识到这里还有其他语法错误。因此,我已修复了这些问题,但是在单词表附近仍然出现相同的错误语法。这是当前代码:
@tempTable as TABLE (id INT identity(1, 1), DocId VARCHAR(20), NextExpTime DATETIME, NextAssignTime DATETIME, Appr INT, IsManualAssign BIT),
答案 0 :(得分:1)
您确实做错了。您在这里所做的是声明一个表变量。根据代码,您的表变量应如下所示:
DECLARE @tempTable TABLE (
id int IDENTITY(1, 1)
, DocId varchar(20)
, NextExpTime datetime
, NextAssignTime datetime
, Appr int
, IsManualAssign bit
)
因此...在表变量的列前面没有@
标记,没有抛出AS
关键字,应明确声明所有类型。
例如,在this link上可以看到更多有关表变量的信息。
这可能不是您希望达到的目标-如果是这样,请在问题中添加更多信息。
答案 1 :(得分:0)
您要
DECLARE @TableVariable table(id INT identity(1,1),
DocId int,
NextExpTime datetime,
NextAssignTime datetime,
Appr int,
IsManualAssign bit);
变量名后没有AS
,它像其他变量一样以DECLARE
开头。