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 las filas devueltas en el conjunto de resultados. Cuando se especifica el todas las opción de filtro de fila, cada cambio tiene exactamente una fila para identificar el cambio. Cuando se especifica el todas las actualizaciones antiguas opción, 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 de la 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 de la 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>
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:
todas las
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.
todas las actualizaciones antiguas
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 valores:1 = eliminar2 = insertar3 = actualización (los valores de columna capturados son valores de columna 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 valores de columna 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 es 1 o 2 . Cuando __$operation es 3 o 4 , solo los bits correspondientes a las columnas que han cambiado se establecen en 1 . |
<captured source table columns> |
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
Las columnas de tipo de datos imagen, textoy ntext siempre se asignan un valor de NULL
NULL
cuando __$operation
es 1
o __$operation
es 3
. Las columnas del tipo de datos varbinary(max), varchar(max), o nvarchar(max) se asignan un valor NULL
cuando __$operation
se 3
a menos que la columna cambie durante la actualización. Cuando __$operation
es 1
, a estas columnas se les asigna su valor en el momento de la eliminación. Las columnas calculadas que se incluyen en una instancia de captura siempre tienen un valor de 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 parámetro lsn_value
supera el tiempo de LSN más bajo o LSN más alto, la ejecución de estas funciones devuelve 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
. Usa 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
en la base de datos AdventureWorks2022
.
-- Enumerate All Changes for Valid Range Template
USE AdventureWorks2022;
GO
DECLARE @from_lsn AS BINARY (10), @to_lsn AS 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