2010-08-23 11 views
6

Estoy tratando de averiguar cómo obtener el siguiente código para devolver la fila que acaba de insertar: un compañero de trabajo señaló y sugirió ejecutar ALTER FULLTEXT CATALOGO uiris_production REBUILD pero no se puede ejecutar dentro de una transacción de usuario.¿Cómo fuerzo una actualización de un índice de texto completo dentro de una transacción en mssql?

La razón por la que esto tiene que ser en una transacción es que esto proviene de un marco de prueba donde la prueba se envuelve en una transacción y luego se retrotrae.

declare @search varchar(64) 
set @login_test = 'foobar' 
set @search = '"' + @login_test + '*"' 

begin transaction 
    insert into users(login) values (@login_test) 
    select login from users where contains(login, @search) 
commit 
+0

No es una prueba unitaria si toca la base de datos (o cualquier otra fuente de datos externa) –

Respuesta

3

Primero, asegúrese de que su índice de texto completo esté configurado para el seguimiento automático de cambios. change_tracking_state debe ser 'A' para esta consulta.

select t.name, fi.change_tracking_state 
    from sys.fulltext_indexes fi 
     inner join sys.tables t 
      on fi.object_id = t.object_id 
    where t.name = 'users' 

Pero, incluso con el seguimiento de cambio automático, hay un cierto grado de latencia en la actualización del texto completo. Puede que necesite construir un WAITFOR en su prueba de unidad para acomodar esto.

+0

Incluso con el seguimiento automático de cambios habilitado, parece que los índices de texto completo solo se actualizan cuando se compromete la transacción, por lo que esperar no tendrá ningún efecto. Esto no parece posible de hacer ... :( – ajbeaven

-2
SELECT SCOPE_IDENTITY() 

te contarían el ID del registro que acaba de crear.

+0

La operación se pregunta cómo obtener toda la fila; no solo el id. Quizás también pueda sugerirles que obtengan el id de la fila insertada, y luego hagan una búsqueda SELECCIONADA en esa identificación. –

Cuestiones relacionadas