variable uso the query dinamicas variables command-line ssis

variables - uso - ¿Cómo arreglar el error de evaluación de restricción de precedencia DTSX mientras se pasa la variable en la línea de comando?



uso de variables en ssis (5)

No estoy seguro si causa el problema, pero está usando una sintaxis un poco extraña para establecer el valor de la variable, intente

dtexec ... /SET /Package.Variables[User::myVariable].Value;3

Tenga en cuenta que estoy usando .Value , en lugar de .Properties[Value] . .Value es la forma oficial recomendada por Books Online. Quizás la sintaxis .Properties[Value] también funcione, pero cambia el tipo de variable.

Tengo un paquete dtsx con una restricción de precedencia que evalúa una expresión y una restricción. La restricción es "éxito" y la expresión es "@myVariable" == 3. myVariable es un int32, y cuando se configura en la GUI de diseño de Visual Studio, el paquete se ejecuta correctamente. Hay otras dos rutas que verifican que el valor sea 1 o 2.

Sin embargo, cuando trato de ejecutar el paquete desde la línea de comando y paso un valor para mi variable, se equivoca al afirmar que la expresión no se evalúa como booleana.

Mando:

dtexec /F "c:myPackage.dtsx" /SET /Package.Variables[User::myVariable].Properties[Value];3

Error:

The expression "@myVariable == 1" must evaluate to True or False. Change the expression to evaluate to a Boolean value.

El hecho de que esto funcione bien desde la GUI y que la documentación de microsofts afirma == (intuitivamente) devuelve un booleano me tiene muy confundido. También he intentado rodear el 3 con comillas dobles en mi comando sin suerte, y ahora estoy sin ideas.

¿Alguien tiene una idea de lo que está pasando?


Esto parece ser un error en la versión inicial de dtexec.exe. Tengo la versión 9.00.3042.00 que es como, SQL Server 2005 SP2, instalada en mi entorno de desarrollo. Tenemos una segunda máquina de prueba que está en la versión 9.00.1399.06. El único lugar donde veo esta falla es en el cuadro de prueba. Mi dev. la caja corre hasta su finalización. Agregué una conversión de tipo explícita (DT_BOOL) a mi variable booleana que era parte de mis expresiones y el error desapareció.

Además, el comentario .Value anterior es incorrecto. Se supone que es .Properties [Value], porque el valor de una variable es simplemente un elemento en la colección de propiedades de variables globales. Esta no es la sintaxis de C # o VB.net. Esta es la sintaxis de SSIS.


Parece un error en ssis porque el valor de su paso a través de la línea de comando no se transfiere automáticamente al tipo de variables de configuración. SSIS parece tratar los valores pasados ​​a través de la línea cmd como cadenas, lo que causa problemas en el tiempo de ejecución. Cambie su variable a una cadena y haga la comparación sobre eso, o use el (DT_I4) para incluir la expresión.


Definitivamente es un error en dtexec. Tuve un problema similar (establecer un valor entero mediante el comando / set en una línea de comando dtexec) que se quejaba aún más en la ejecución del paquete, la variable (salida) era del tipo incorrecto cuando se devolvía desde un procedimiento.

Omitir el conjunto de ese valor (lo estaba poniendo a cero de todos modos) arregló el error de ejecución del paquete. No estoy seguro de qué haría si realmente necesitara el valor: parece que funciona bien como parámetros de entrada, simplemente se arruina cuando quiere usarlos como parámetros de salida y no son cadenas.


Lo siento me llevó tanto tiempo para volver a este hilo. Pero (DT_I4)@[User::myVariable] == 3 hizo el truco. ¡Gracias!