Получение значения идентификатора из таблицы с одним столбцом идентификатора в FitNesse

Поддерживает ли FitNesse / dbFit вставку в таблицу с одним столбцом идентификаторов с последующим возвратом этого значения в переменную?

Например:

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

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

приводит к следующему исключению:

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

Есть ли другой способ добиться этого?


person sduplooy    schedule 12.09.2012    source источник
comment
Кроме того, существует несколько таблиц, для которых это должно произойти, поэтому я не могу иметь несколько операторов set identity_insert on.   -  person sduplooy    schedule 12.09.2012


Ответы (1)


Ваша проблема не в Фитнесе, а в движке SQL. Если вы попробуете тот же запрос в SQL Server Management Studio, вы получите ту же ошибку. Таким образом, учитывая ограничение, что вы не можете использовать set identity_insert on, вам действительно нужно задать вопрос: как вставить запись без вставляемых полей в SQL Server независимо от Fitnesse? Это сообщение StackOverflow дает простой ответ:

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. Это, однако, не возвращает результатов, поэтому вы не можете напрямую получить автоматически вставленное значение идентификатора. Последний запрос дает вам один способ получить только что вставленное значение идентификатора.

person Michael Sorens    schedule 16.09.2012