2012-01-10 12 views
1

Предположим, что я создаю PK для таблицы SQL-сервера SQL Server с помощью функции newid(). В Java я могу сделать что-то вроде этого:Как получить значение uniqueidentifier, сгенерированное при вставке в Delphi ADO?

... 
String query = "DECLARE @newGuid uniqueidentifier "+ 
"SET @newGuid = newid() "+ 
"INSERT INTO myTable(id, stringval) "+ 
"VALUES (@newGuid, "Hello") "+ 
"SELECT uid FROM @newGuid"; 
PreparedStatement ps = conn.prepareStatement(query); 
ResultSet rs = ps.executeQuery(); 
String uid = rs.getString("uid"); 

Но когда я пытаюсь сделать это с Delphi + ADO Я застревают причину ADO можете получить данные из БД (Open метод AdoQuery) или поместить данные в БД (ExecSQL способ). Поэтому я не могу вставить новое значение в таблицу и после этого получить значение параметра.

ответ

4

Вы можете решить эту проблему по крайней мере двумя способами.

  1. Вы можете поместить оба ваших запросов SQL в одну строку (так же, как у вас есть в вашем примере) и вызвать TADOQuery.Open или TADOQuery.Active := True. не имеет значения, что у вас есть заявление INSERT, пока запрос возвращает что-то.

  2. Вы можете определить направление параметра как pdOutput в коллекции ADOQuery.Parameters и прочитать значение этого параметра после выполнения запроса.

1

Вы обрабатываете @newGuid, как если бы это был стол. Ваша последняя строка в запросе должна быть:

SELECT @newGuid as uid 
Смежные вопросы