cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)
Se aplica a: SQL Server
Devuelve una fila para cada cambio aplicado a la tabla de origen dentro del intervalo del número de secuencia de registro (LSN) especificado. Si una fila de origen ha tenido muchos cambios durante el intervalo, cada cambio se representa en el conjunto de resultados devuelto. Además de devolver los datos del cambio, cuatro columnas de metadatos proporcionan la información que necesita aplicar los cambios a otro origen de datos. Las opciones de filtrado de filas rigen el contenido de las columnas de metadatos y de las filas devueltas en el conjunto de resultados. Cuando se especifica la opción de filtro de filas 'all', cada cambio tiene exactamente una fila para identificar el cambio. Cuando se especifica la opción 'all update old', las operaciones de actualización se representan como dos filas: una que contiene los valores de las columnas capturadas antes de la actualización y otra que contiene los valores de las columnas capturadas después de la actualización.
Esta función de enumeración se crea cuando se habilita una tabla de origen para la captura de datos modificados. El nombre de la función se deriva y usa el formato cdc.fn_cdc_get_all_changes_<capture_instance>
donde capture_instance es el valor especificado para la instancia de captura cuando la tabla de origen está habilitada para la captura de datos modificados.
Convenciones de sintaxis de Transact-SQL
Sintaxis
cdc.fn_cdc_get_all_changes_capture_instance ( from_lsn , to_lsn , '<row_filter_option>' )
<row_filter_option> ::=
{ all
| all update old
}
Argumentos
from_lsn
Valor LSN que representa el punto de conexión bajo del intervalo LSN que se va a incluir en el conjunto de resultados. from_lsn es binary(10).
Solo las filas del cdc.[ capture_instance]_CT tabla de cambios con un valor en __$start_lsn mayor o igual que from_lsn se incluyen en el conjunto de resultados.
to_lsn
El valor LSN que representa el extremo inferior del rango de LSN que se incluirá en el conjunto de resultados. to_lsn es binary(10).
Solo las filas del cdc.[ capture_instance]_CT tabla de cambios con un valor en __$start_lsn mayor o igual que from_lsn y menor o igual que to_lsn se incluyen en el conjunto de resultados.
<> row_filter_option ::= { all | all update old }
Una opción que rige el contenido de las columnas de metadatos y las filas devueltas en el conjunto de resultados.
Puede ser una de las siguientes opciones:
all
Devuelve todos los cambios dentro del intervalo LSN especificado. Para los cambios debidos a una operación de actualización, esta opción devuelve solo la fila que contiene los nuevos valores una vez aplicada la actualización.
all update old
Devuelve todos los cambios dentro del intervalo LSN especificado. Para los cambios debidos a una operación de actualización, esta opción devuelve tanto la fila que contiene los nuevos valores antes de la actualización como la fila que contiene los valores de columna después de la actualización.
Tabla devuelta
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
__$start_lsn | binary(10) | LSN de confirmación asociado con el cambio que conserva el orden de confirmación del cambio. Los cambios confirmados en la misma transacción comparten el mismo valor LSN de confirmación. |
__$seqval | binary(10) | Valor de secuencia utilizado para ordenar los cambios en una fila dentro de una transacción. |
__$operation | int | Identifica la operación del lenguaje de manipulación de datos (DML) necesaria para aplicar la fila de datos modificados al origen de datos de destino. Puede ser uno de los siguientes: 1 = eliminar 2 = insertar 3 = actualización (los valores de columna capturados son los de antes de la operación de actualización). Este valor solamente se aplica cuando se especifica la opción de filtro de filas 'all update old'. 4 = actualización (los valores de columna capturados son los de después de la operación de actualización) |
__$update_mask | varbinary(128) | Máscara de bits con un bit que corresponde a cada columna capturada identificada para la instancia de captura. Este valor tiene todos los bits definidos establecidos en 1 cuando __$operation = 1 o 2. Cuando __$operation = 3 o 4, solo los bits correspondientes a las columnas que han cambiado se establecen en 1. |
<columnas de la tabla de origen capturadas> | Varía | Las columnas restantes devueltas por la función son las columnas capturadas identificadas cuando se creó la instancia de captura. Si no se especificó ninguna columna en la lista de columnas capturadas, se devuelven todas las columnas de la tabla de origen. |
Permisos
Requiere la pertenencia al rol fijo de servidor sysadmin o db_owner rol fijo de base de datos. Para el resto de usuarios, requiere el permiso SELECT en todas las columnas capturadas en la tabla de origen y, si se ha definido un rol de acceso para la instancia de captura, la pertenencia a ese rol de base de datos. Cuando el autor de la llamada no tiene permiso para ver los datos de origen, la función devuelve el error 229. The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '\<DatabaseName>', schema 'cdc'.
Comentarios
Siempre se asigna un valor NULL a las columnas de tipo de datos image, text y ntext cuando __$operation = 1 o __$operation = 3. A las columnas de tipo de datos varbinary(max),varchar(max)o nvarchar(max) se les asigna un valor NULL cuando __$operation = 3 a menos que la columna cambie durante la actualización. Cuando __$operation = 1, a estas columnas se les asigna su valor en el momento de la eliminación. Las columnas calculadas que están incluidas en una instancia de captura siempre tienen el valor NULL.
Se espera el error 313 si el intervalo LSN proporcionado no es adecuado al llamar a cdc.fn_cdc_get_all_changes_<capture_instance>
o cdc.fn_cdc_get_net_changes_<capture_instance>
. Si el lsn_value
parámetro supera el tiempo de LSN más bajo o LSN más alto, la ejecución de estas funciones devolverá el error 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function
. El desarrollador debe controlar este error.
Ejemplos
Hay varias plantillas de SQL Server Management Studio disponibles que muestran cómo usar las funciones de consulta de captura de datos modificados. Estas plantillas están disponibles en el menú Ver de Management Studio. Para obtener más información, vea Explorador de plantillas.
Este ejemplo muestra la Enumerate All Changes for Valid Range Template
. Utiliza la función cdc.fn_cdc_get_all_changes_HR_Department
para notificar todos los cambios disponibles actualmente para la instancia de captura HR_Department
, que se define para la tabla de origen HumanResources.Department de la base de datos AdventureWorks2022
.
-- ========
-- Enumerate All Changes for Valid Range Template
-- ========
USE AdventureWorks2022;
GO
DECLARE @from_lsn binary(10), @to_lsn binary(10);
SET @from_lsn = sys.fn_cdc_get_min_lsn('HR_Department');
SET @to_lsn = sys.fn_cdc_get_max_lsn();
SELECT * FROM cdc.fn_cdc_get_all_changes_HR_Department
(@from_lsn, @to_lsn, N'all');
GO