在SQL Server单元测试中声明临时表的语法

时间:2019-02-27 19:38:48

标签: asp.net sql-server unit-testing

我正在为存储过程创建一个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),

2 个答案:

答案 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开头。