Share via


<sys.fn_net_changes_capture_instance> (Transact-SQL)

Se aplica a:SQL Server

Contenedores para las funciones de consulta de cambios netos . El procedimiento almacenado genera sys.sp_cdc_generate_wrapper_function los scripts necesarios para crear estas funciones. Para obtener más información sobre el procedimiento almacenado usado para crear sys.fn_net_changes_<capture_instance>, vea sys.sp_cdc_generate_wrapper_function (Transact-SQL).

Convenciones de sintaxis de Transact-SQL

Sintaxis

  
fn_net_changes_<capture_instance> ('start_time', 'end_time', '<row_filter_option>' )  
  
<capture_instance> ::= The name of the capture instance.  
<row_filter_option> ::=  
{ all  
  | all with mask  
  | all with merge  
}  

Argumentos

start_time

Valor datetime que representa el extremo inferior del intervalo de entradas de tabla de cambios que se van a incluir en el conjunto de resultados.

Solo las filas de la cdc.<capture_instance>_CT tabla de cambios que tienen un tiempo de confirmación asociado estrictamente mayor que start_time se incluyen en el conjunto de resultados.

Si se proporciona un valor NULL para este argumento, el extremo inferior del intervalo de consulta se corresponderá con el extremo inferior del intervalo válido de la instancia de captura.

Si el valor del parámetro @start_time o @end_time supera la hora del LSN más bajo o más alto, la ejecución de las funciones de contenedor generadas 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.

end_time

Valor datetime que representa el extremo alto del intervalo de entradas de la tabla de cambios que se van a incluir en el conjunto de resultados.

Este parámetro puede tomar uno de los dos significados, según el valor elegido para @closed_high_end_point cuando sys.sp_cdc_generate_wrapper_function se llame a para generar el script para crear la función contenedora:

  • @closed_high_end_point = 1

    Solo las filas de la cdc.<capture_instance>_CT tabla de cambios que tienen un valor en __$start_lsn y un tiempo de confirmación correspondiente menor o igual que start_time se incluyen en el conjunto de resultados.

  • @closed_high_end_point = 0

    Solo las filas de la cdc.<capture_instance>_CT tabla de cambios que tienen un valor en __$start_lsn y un tiempo de confirmación correspondiente estrictamente menor que start_time se incluyen en el conjunto de resultados.

Si se proporciona un valor NULL para este argumento, el extremo superior del intervalo de consulta se corresponderá con el extremo superior del intervalo válido de la instancia de captura.

Si el valor del parámetro @start_time o @end_time supera la hora del LSN más bajo o más alto, la ejecución de las funciones de contenedor generadas 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.

<>row_filter_option ::= { all | all with mask | all with merge }

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:

todo
Devuelve el contenido final de una fila cambiada en las columnas de contenido y la operación que se necesita para aplicar la fila en la columna de metadatos __CDC_OPERATION.

all with mask
Devuelve el contenido final de todas las filas cambiadas en las columnas de contenido y la operación necesaria para aplicar cada fila en la columna de metadatos __CDC_OPERATION. Si se especificó una lista de marcas de actualización al generar el script para crear la función contenedora, esta opción es necesaria para rellenar la máscara de actualización.

todos con combinación
Devuelve el contenido final de todas las filas cambiadas en las columnas de contenido.

La columna __CDC_OPERATION contendrá uno de los dos valores siguientes:

  • D, si se debe eliminar la fila.

  • M, si la fila se debe insertar o actualizar.

La lógica para determinar si se requiere una operación de inserción o actualización para aplicar un cambio al destino agrega complejidad a la consulta. Utilice esta opción para mejorar el rendimiento cuando no sea necesario diferenciar entre operaciones de inserción y actualización. Este enfoque funciona mejor en entornos de destino en los que una operación de combinación está disponible directamente.

Tabla devuelta

Nombre de la columna Tipo de columna Descripción
<columnas de @column_list> varía Las columnas que se identifican en el argumento column_list a cuando sp_cdc_generate_wrapper_function se llama a para generar el script para crear el contenedor. Si column_list es NULL, todas las columnas de origen con seguimiento aparecerán en el conjunto de resultados.
__CDC_OPERATION nvarchar(2) Código de operación que indica qué operación es necesaria para aplicar la fila al entorno de destino. La operación variará en función del valor del argumento row_filter_option que se proporcione en la siguiente llamada:

row_filter_option = 'all' , 'all with mask'

'D' - operación de eliminación

'I' - operación de inserción

'UN' - operación de actualización

row_filter_option = 'all with merge'

'D' - operación de eliminación

'M' - operación de inserción o de actualización
<columnas de @update_flag_list> bit Marca de bits que se denomina anexando _uflag al nombre de columna. La marca toma un valor distinto de NULL solo cuando row_filter_option= 'all with mask' y __CDC_OPERATION = 'UN'. Se establece en 1 si la columna correspondiente se modificó dentro de la ventana de consulta. De lo contrario, es 0.

Comentarios

La fn_net_changes_<capture_instance> función actúa como contenedor para la función de cdc.fn_cdc_get_net_changes_<capture_instance> consulta. El sys.sp_cdc_generate_wrapper procedimiento almacenado se usa para crear el script para el contenedor.

Las funciones contenedoras no se crean automáticamente. Para crear funciones contenedoras hay que seguir dos pasos:

  1. Ejecutar el procedimiento almacenado para generar el script que permite crear el contenedor.

  2. Ejecutar el script para crear realmente la función contenedora.

Las funciones contenedoras permiten a los usuarios consultar sistemáticamente los cambios que se produjeron dentro de un intervalo limitado por valores datetime en lugar de por valores LSN. Las funciones contenedoras realizan todas las conversiones necesarias entre los valores datetime proporcionados y los valores LSN necesarios internamente como argumentos para las funciones de consulta. Cuando las funciones contenedoras se usan en serie para procesar un flujo de datos modificados, garantizan que no se pierdan o repitan los datos siempre que se siga la siguiente convención: el @end_time valor del intervalo asociado a una llamada se proporciona como valor @start_time para el intervalo asociado a la llamada posterior.

Si se usa el parámetro @closed_high_end_point al crear el script, se pueden generar contenedores para admitir un límite superior cerrado o un límite superior abierto en la ventana de consulta especificada. Es decir, puede decidir si las entradas que tienen un tiempo de confirmación igual al límite superior del intervalo de extracción se incluirán en el intervalo. De forma predeterminada, se incluye el límite superior.

El conjunto de resultados devuelto por la función contenedora net changes devuelve solo las columnas con seguimiento que estaban en el @column_list momento en que se generó el contenedor. Si @column_list es NULL, se devuelven todas las columnas de origen sometidas a seguimiento. Las columnas de origen van seguidas de una columna de operación, __CDC_OPERATION, que es una columna de uno o dos caracteres que identifica la operación.

A continuación, las marcas de bits se anexan al conjunto de resultados para cada columna que se identifica en el parámetro @update_flag_list. Para el contenedor de cambios netos , las marcas de bits siempre serán NULL si el @row_filter_option objeto que se usa en la llamada a la función contenedora es "all" o "all with merge". Si se establece en @row_filter_option "all with mask", y __CDC_OPERATION es "D" o "I", el valor de la marca también será NULL. Si __CDC_OPERATION es "UN", la marca se establecerá en 1 o 0, en función de si la operación de actualización neta provocó un cambio en la columna.

La plantilla de configuración de captura de datos modificados "Creación de instancias de TVFs de contenedor CDC para esquema" muestra cómo usar el sp_cdc_generate_wrapper_function procedimiento almacenado para obtener scripts CREATE para todas las funciones contenedoras de las funciones de consulta definidas de un esquema. A continuación, la plantilla crea esos scripts. Para obtener más información sobre las plantillas, vea Explorador de plantillas.

Las funciones sys.fn_all_changes_<capture_instance> contenedoras y sys.fn_net_changes_<capture_instance> dependen de las funciones cdc.fn_cdc_get_all_changes_<capture_instance> del sistema y cdc.fn_cdc_get_net_changes_<capture_instance>. 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. Puede encontrar un ejemplo de T-SQL para una solución alternativa en ReplTalk en GitHub.

Consulte también