2012-09-12 54 views
0

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

例如:

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

!|Insert|TestTable| 
|ID?    | 
|>>TestID   | 

导致以下异常:

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

有另一种方式来做到这一点?

+0

此外,有多个表需要发生这种情况,所以我不能有多个'set identity_insert on'语句。 – sduplooy

回答

0

你的问题不是与Fitnesse,而是与SQL引擎。如果您在SQL Server Management Studio中尝试相同的查询,您将收到相同的错误。因此,考虑到你不能使用的限制set identity_insert on你真的需要问的问题是如何在SQL Server 中插入没有可插入字段的记录,而不依赖于FitnesseThis 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值。最后的查询为您提供了一种方法来获取刚刚插入的标识值。