Sql 从FitNesse中具有单个标识列的表中获取标识值

Sql 从FitNesse中具有单个标识列的表中获取标识值,sql,testing,integration-testing,fitnesse,dbfit,Sql,Testing,Integration Testing,Fitnesse,Dbfit,FitNesse/dbFit是否支持插入到具有单个标识列的表中,然后将该值返回到变量中 例如: create table TestTable ( ID int identity(1,1) ) !|Insert|TestTable| |ID? | |>>TestID | 导致以下异常: System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near ')'. 有

FitNesse/dbFit是否支持插入到具有单个标识列的表中,然后将该值返回到变量中

例如:

create table TestTable ( ID int identity(1,1) )

!|Insert|TestTable|
|ID?              |
|>>TestID         |
导致以下异常:

System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near ')'.

有没有其他方法可以做到这一点?

您的问题不在于Fitnesse,而在于SQL引擎。如果在SQLServerManagementStudio中尝试相同的查询,您将收到相同的错误。因此,考虑到您不能在上使用
set identity\u insert的限制,您真正需要问的问题是,如何在SQL Server中插入一个与Fitnesse无关的、没有可插入字段的记录?提供了一个简单的答案:

INSERT INTO #TempTable DEFAULT VALUES
现在的任务是将其映射到Fitnesse。这里有一个解决方案:

!|execute|CREATE TABLE #TestTable ( ID int identity(1,1) )|

!|execute|INSERT INTO #TestTable DEFAULT VALUES|

!|query|SELECT TOP 1 @@IDENTITY [ID] FROM #TestTable|
|ID?                                                |
|>>TestID                                           |

Fitnesse的INSERT命令不支持默认构造,因此必须切换到更通用的EXECUTE命令来执行插入。但是,这不会返回结果,因此无法直接收集自动插入的ID值。最后一个查询为您提供了一种获取刚刚插入的标识值的方法。

此外,需要对多个表执行此操作,因此我不能有多个“set identity\u insert on”语句。