valor una pérdida puede pudo posible operación expresión evaluar error dts_w_maximumerrorcountreached desconocido debido datos código convertir compatible 0x80070057 sql sql-server ssis ssis-2012

sql - puede - no se pudo convertir el valor debido a una posible pérdida de datos



El paquete SSIS no desea recuperar los metadatos de la tabla temporal (5)

Tengo un paquete SSIS, que contiene múltiples flujos.

Cada flujo es responsable de crear una tabla de "preparación", que se llena después de la creación. Estas tablas son tablas temporales globales .

Agregué 1 flujo adicional (no hice el paquete) que hace exactamente lo que se indicó anteriormente, para otra tabla. Sin embargo, por alguna razón, el paquete falla intermitentemente en este flujo, mientras que es exactamente igual a otros, además de algunos nombres de tablas.

El error que sigue apareciendo:

Actualización: insertar flujo de datos: Error: Código de error SSIS DTS_E_OLEDBERROR. Se ha producido un error OLE DB. Código de error: 0x80004005. Un registro OLE DB está disponible. Fuente: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Descripción: "Error no especificado". Un registro OLE DB está disponible. Fuente: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Descripción: "Los metadatos no se pudieron determinar porque la declaración ''select * from'' ## TmpMcsConfigurationDeviceHistory86B34BFD041A430E84CCACE78DA336A1 ''usa una tabla temporal.".

Expresión de creación:

"CREATE TABLE " + @[User::TmpMcsConfigurationDeviceHistory] + " ([RecId] [bigint] NULL,[DataAreaID] [nvarchar](4) COLLATE database_default NULL,[Asset] [bigint] NULL,[Code] [nvarchar](255) COLLATE database_default NULL,[Configuration] [bigint],[StartdateTime] [datetime] NULL,[EndDateTime] [datetime] NULL)

"

Expresión analizada (= evaluada):

CREATE TABLE ##TmpMcsConfigurationDeviceHistory764E56F088DC475C9CC747CC82B9E388 ([RecId] [bigint] NULL,[DataAreaID] [nvarchar](4) COLLATE database_default NULL,[Asset] [bigint] NULL,[Code] [nvarchar](255) COLLATE database_default NULL,[Configuration] [bigint],[StartdateTime] [datetime] NULL,[EndDateTime] [datetime] NULL)


Descubrí que el problema residía en un problema de duplicado de GUID, copié elementos (como el de crear tablas temporales) y todos recibieron la misma guía al copiar. Utilicé una herramienta para restablecer todas estas guías en mi paquete y esto resolvió mi problema.

¡Gracias!


Otra opción (tipo de pirateo, pero funciona y no requiere que cambies tu uso de tablas temporales globales) es usar el comando SET FMTONLY ON delante de tu consulta real para enviar un "Primer conjunto de resultados" falso a SSIS con su estructura de columna correcta. Así que puedes hacer algo como

SET FMTONLY ON select 0 as a, 1 as b, ''test'' as C, GETDATE() as D SET FMTONLY OFF select a, b, c, d from ##TempTable

Cuando SSIS ejecuta sp_describe_first_result_set, devolverá los metadatos y los nombres de columna de su comando FMTONLY, y no se quejará de no poder determinar los metadatos de su tabla temporal porque ni siquiera lo intentará.



Tenía el mismo problema que usamos la tabla temporal para la puesta en escena. Después de pasar algún tiempo, encontró un trabajo alrededor.

En la tarea OLE DB / ADO Destino del flujo de datos donde se especifica el nombre de la tabla de etapas.

Cambie la propiedad AccessMode a comando SQL en lugar de OpenRowSet y especifique la propiedad Comando SQL para "seleccionar * de #temp".

Hurra, está funcionando como se esperaba.

La captura aquí es cuando se especifica un modo de acceso diferente al comando SQL, SSIS espera que sea una tabla / vista y cambió el SSIS para llamar a sp_describe_first_result_set para obtener los metadatos pero cuando especifica el Comando SQL, está esperando una consulta o un comando SP, por lo que, afortunadamente, todavía usa la forma antigua de obtener los metadatos.

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/cfe1c7c1-910a-4f52-9718-c3406263b177/usage-of-temp-tables-in-ssis-2012?forum=sqlintegrationservices#cfe1c7c1-910a-4f52-9718-c3406263b177


El uso de WITH RESULT SETS para definir explícitamente los metadatos permitirá a SSIS omitir el paso sp_describe_first_result_set y usar los metadatos que defina. La ventaja es que puede usar esto para hacer que SSIS ejecute SQL que contiene una tabla temporal (para mí, ese rendimiento me ayudó mucho); el inconveniente es que tienes que mantenerlo manualmente y actualizarlo si algo cambia.

Muestra de consulta (procedimiento almacenado :)

EXEC (''dbo.MyStoredProcedure'') WITH RESULT SETS ( ( MyIntegerColumn INT NOT NULL, MyTextColumn VARCHAR(50) NULL, MyOtherColumn BIT NULL ) )

Ejemplo de consulta (SQL simple :)

EXEC ('' CREATE TABLE #a ( Col INT ) INSERT INTO #a ( COL ) SELECT 1 AS Col SELECT Col FROM #a'') WITH RESULT SETS ( (Col INT NOT NULL)) )