FitNesse / dbFit是否支持插入具有单个标识列的表,然后将该值返回到变量中?
例如:
create table TestTable ( ID int identity(1,1) )
!|Insert|TestTable|
|ID? |
|>>TestID |
导致以下异常:
System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near ')'.
还有另一种方法可以实现这个目标吗?
答案 0 :(得分:0)
你的问题不是Fitnesse,而是SQL引擎。如果您在SQL Server Management Studio中尝试相同的查询,您将收到相同的错误。因此,考虑到您不能使用set identity_insert on
这个问题的限制,您真正需要问的是如何在SQL Server 中独立于Fitnesse 插入一个没有可插入字段的记录? This StackOverflow post提供了一个简单的答案:
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值。最后的查询为您提供了一种获取刚刚插入的标识值的方法。