¿Cómo resolver problemas de asignación de parámetros de consulta SQL mientras se utiliza el proveedor Oracle OLE DB?

StackOverflow https://stackoverflow.com/questions/58540

  •  09-06-2019
  •  | 
  •  

Pregunta

Al intentar ingresar una consulta SQL con parámetros usando el proveedor Oracle OLE DB, aparece el siguiente error:

Los parámetros no se pueden extraer del comando SQL.Es posible que el proveedor no ayude a analizar la información de los parámetros del comando.En ese caso, utilice el modo de acceso "comando SQL desde variable", en el que todo el comando SQL se almacena en una variable.
INFORMACIÓN ADICIONAL:
El proveedor no puede derivar información de parámetros y no se ha llamado a SetParameterInfo.(Proveedor Microsoft OLE DB para Oracle)

Intenté seguir la sugerencia aquí pero no entiendo muy bien lo que se requiere:Consultas parametrizadas contra Oracle.

¿Algunas ideas?

¿Fue útil?

Solución

Para ampliar el enlace que figura en la pregunta:

  1. Crear una variable de paquete
  2. Haga doble clic en el nombre de la variable del paquete.(Esto le permite acceder a las propiedades de la variable)
  3. Establezca la propiedad 'EvaluateAsExpression' en verdadero
  4. Ingrese la consulta en el generador de expresiones.
  5. Establezca la consulta de origen OLE DB en comando SQL desde variable

El generador de expresiones puede crear expresiones dinámicamente utilizando variables para crear "consultas parametrizadas".
Entonces la siguiente consulta "normal":

select * from book where book.BOOK_ID = ?

Se puede escribir en el generador de expresiones como:

"select * from book where book.BOOK_ID = " + @[User::BookID]

Luego puede realizar manejo nulo y conversión de datos utilizando el generador de expresiones.

Otros consejos

Si utiliza la tarea de flujo de datos y utiliza la fuente OLE DB, y necesita parametrizar su consulta:

  1. Cree una variable para guardar "completa" la declaración de consulta:Haga clic derecho en el área en blanco fuera del paquete y haga clic en Variables:

Variables

Haga clic en Agregar variables en la ventana Variables:

enter image description here

Haz que el nombre sea SQL_DTFLOW_FULL o algo que puedas entender fácilmente.El variable data type es STRING

  1. Cree variables para guardar sus parámetros.

es decir, el total de declaraciones de consulta es:

SELECT * FROM BOOK WHERE BOOK_ID = @BookID --@BookID is SQL Parameter

En el ejemplo anterior, solo tengo un parámetro:@BookID, entonces necesito crear una variable para guardar mi parámetro.Agregue más variables depende de sus consultas.

ParamAdd

dale nombre SQL_DTFLOW_BOOKID

El variable data type es STRING

Por lo tanto, necesita que su SSIS esté ordenado y que las variables estén ordenadas en partes comprensibles.

Intente hacer que el nombre de la variable sea SQL_{TASK NAME}_{VariableName}

  1. hacer expresión para SQL_DTFLOW_FULL variable, haga clic en el número 1 y comience a completar el número 2.Haga que sus declaraciones SQL sean una declaración SQL correcta utilizando un bloque de cadena.El bloque de cadena suele utilizar "comillas dobles" al principio y al final.Concat las variables con el bloque de cadena.

Expression

Haga clic en evaluar expresión para mostrar el resultado, para asegurarse de que su consulta sea correcta, copie y pegue el resultado de la consulta en SSMS.

Asegúrese usted mismo de que las variables estén libres de inyección SQL utilizando su propia lógica.(Utilice su instinto de desarrollador)

  1. Abra la tarea de flujo de datos, abra el editor de origen OLE DB haciendo doble clic en el elemento.

Data Flow

  • Seleccione el modo de acceso a datos: SQL Command From Variable
  • Seleccione el nombre de la variable: SQL_DTFLOW_FULL
  • Haga clic en Vista previa para asegurarse de que funcione.

Eso es todo, mi manera de prevenir este caso de falla del SSIS.Desde que uso esta manera, nunca tuve ese problema, ya sabes, SSIS algo es extraño.

Para cambiar el valor de la variable, configúrelo antes de la Tarea de flujo de datos, el resultado SQL de SQL_DTFLOW_FULL La variable cambiará cada vez que cambie el valor de su variable.

En mi caso, el problema fue que tenía comentarios dentro del SQL en la forma normal de /* */ y también tenía alias de columna como "Nombre de columna" en lugar de [Nombre de columna].

Una vez que los eliminé, funciona.

¿También intenta tener su parámetro?declaración dentro de la cláusula WHERE y no dentro de JOINS, eso también era parte del problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top