7

Tengo una base de datos ejecutándose en el servidor Sql 2005 con replicación de mezcla. Quiero cambiar algunas de las columnas FK para que sean 'no nulas' ya que siempre deberían tener un valor. SQL Server no me deja hacer eso, sin embargo, esto es lo que dice:Cambiar la restricción de columna null/not null = error de replicación de rowguid

  • no puede modificar la tabla. No es válido soltar la restricción predeterminada en la columna rowguid que se utiliza en la replicación de combinación . El cambio de esquema falló durante la ejecución de un procedimiento interno de replicación . Para la acción correctiva , consulte los otros mensajes de error que acompañan a este mensaje de error. La transacción finalizó en el desencadenador. El lote se ha cancelado.

No estoy tratando de cambiar las restricciones sobre la columna rowguid en absoluto, sólo en otra columna que actúa como FK. Otras columnas que quiero establecer no son nulas porque el registro no tiene ningún sentido sin esa información (es decir, en un cliente, el nombre del cliente).

Preguntas: ¿Hay alguna manera de actualizar columnas para que sean 'no nulas' sin apagar la replicación y luego volver a encenderla? ¿Es esta la mejor manera de hacer esto? ¿Debería usar una restricción en su lugar?

Respuesta

8

Al parecer, SSMS realiza cambios en las tablas soltándolos y volviéndolos a crear. Entonces solo necesitaba hacer los cambios usando la declaración T-SQL.

ALTER TABLE dbo.MyTable ALTER COLUMN MyColumn nvarchar(50) NOT NULL 
3

Necesitas guión en su cambio de instrucciones T-SQL como SQL Server Management Studio tratará de quitar y volver a crear la tabla, en lugar de simplemente añadiendo la columna adicional.

También deberá agregar la nueva columna a sus publicaciones.

Tenga en cuenta que cambiar una columna de esta manera puede ser perjudicial para el rendimiento de la Replicación. Dependiendo del tamaño de la tabla que esté alterando, puede llevar a que se repliquen muchos datos. Tenga en cuenta que aunque la modificación de su tabla se puede realizar en una sola instrucción, si se afectan 1 millón de filas, se generarán 1 millón de actualizaciones en el suscriptor, NO una única declaración de actualización como se piensa comúnmente.

Las manos en el enfoque mejor desempeño .......

Para realizar este ejercicio es necesario:

  1. copia de seguridad del entorno de duplicación de secuencias de comandos a cabo toda su configuración.
  2. quitar la tabla de replicación en ambos Editores/Suscriptores
  3. Añadir la columna en cada editor/suscriptor.
  4. Aplique la actualización localmente en cada editor/suscriptor .
  5. Agregue la tabla nuevamente a la Replicación.
  6. Validar que las transacciones están siendo Replicado.
Cuestiones relacionadas