Cómo superar el error vs_needsnewmetadata en la tarea de flujo de datos?


5

Tengo un paquete SSIS que copia los datos en una tabla de un SQL Server 2005 a otro SQL Server 2005. Lo hago con una tarea de "Flujo de datos". En el archivo de configuración del paquete, expongo el nombre de la tabla de destino.

El problema es cuando cambio el nombre de la tabla de destino en el archivo de configuración (a través del bloc de notas) obtengo el siguiente error "vs_needsnewmetadata". Creo que entiendo el problema ... la asignación de la columna de la tabla de destino se corrigió cuando configuré el paquete por primera vez.

Pregunta: ¿Cuál es la forma más fácil de hacer lo anterior con un paquete ssis?

He leído en línea sobre cómo configurar los metadatos programáticamente y todo, pero me gustaría evitar esto. También escribí una aplicación de consola C# que hace todo bien ... todas las tablas, etc. están especificadas en la aplicación.config ... pero aparentemente esta solución no es lo suficientemente buena.

0

Si todo lo que hace es copiar datos de un servidor SQL2005 a otro, simplemente crearía un servidor vinculado y usaría un proceso almacenado para copiar los datos. Un paquete de SSIS es excesivo.

How to Create linked server

Una vez creado el servidor vinculado que lo haría solo programa algo así como ...

INSERT INTO server1.dbo.database1.table1(id,name) 
SELECT id, name FROM server2.dbo.database1.table1 

En cuanto al paquete SSIS que siempre he tenido que abrir de nuevo y reconstruir el paquete de modo que la meta los datos se actualizan cuando se modifican las propiedades de la columna de tablas.


1

Compruebe si la nueva tabla de destino tiene las mismas columnas que la anterior.

Creo que el error se produce si las columnas son diferentes y el destino ya no puede asignar sus columnas de entrada a las columnas de la tabla. Si dos tablas tienen el mismo esquema, este error no debería ocurrir.


6

¿Ha configurado DelayValidation en False en las propiedades de destino del origen de datos? Si no, intenta eso.

Editar: Por supuesto que debe ser DelayValidation a True, por lo que simplemente sigue adelante y lo intenta en lugar de verificar. Además, en lugar de alterar el paquete en el Bloc de notas, ¿por qué no poner el nombre de la tabla en una variable, poner la variable en una Expresión en el destino y luego exponer la variable en un archivo de configuración .DtsConfig? Entonces puedes cambiar eso sin peligro.


2

Coincidir con la columna de origen de origen con mayúsculas y minúsculas ha hecho el trabajo por mí.

Al igual que en mi caso fue SrNo_prod columna en dev y usarla desarrollamos el dtsx, mientras que se ha creado como SrNo_Prod en prod, después de hacer el cambio caso P-p, tenemos ejecución exitosa de paquete.