Pasar parámetros en dts con subconsultas

27/08/2004 - 10:40 por sinma10 | Informe spam
Hola a todo@s.

Tengo una duda relacionada con el paso de parámetros en un dts.
He creado varios dts, que aplican una serie de cálculos a una tabla
después de varias tareas de transformación de datos. Resulta que las
sentencias de estos cálculos son idénticas en todos estos dts, excepto
en el "where" donde cada dts modifica las filas donde el valor del
campo "id" sea n (n tiene un valor diferente en cada DTS). Por lo que
se ha decidido hacer un dts tenérico exlusivamente con los cálculos, y
llamar a este paquete desde los diferentes dts pasándole como
parámetro el valor del campo "id" correspondiente, así si hay un
cambio en alguno de los cálculos sólo habrá que modificar un dts, y no
todos los dts que utilizan estos cálculos.
Entonces he creado este dts genérico con los cálculos. He definido
"id" como variable global. Y en las querys de update (en las que hay
subconsultas), en la cláusula "where" he puesto: "where id = ?". Pero
me muestra el siguiente error:
"Origen del error: Microsoft OLE DB Provider for SQL Server"
"Descripción del error: No se puede obtener la información de
parámetros a partir de instrucciones SQL con consultas de
subselección. Establezca la información de parámetros antes de
preparar el comando"

Alguien me podría decir por qué me muestra este error? Y cómo podría
solucionarlo?

Muchas gracias de antemano!
Un saludo.

Preguntas similare

Leer las respuestas

#1 Javier Loria
27/08/2004 - 15:13 | Informe spam
Hola Inma:
La forma en que lo estas disenando es extramadamente dificil de resolver
y terriblemente complicado, ya que operar fila por fila a travez de un DTS
es muy lento y dificil. Te recomiendo las siguientes opciones:
a) Escribe el codigo en SQL: Usa conjuntos de datos con transformacion
en BLOQUES completos y no fila por fila. Dificil de construir para un
programador porque tienen que cambiar la forma de pensar, pero es muy rapido
para un dba y muy rapido de ejecutar.
b) Escribe el codigo en VB y lo pones en una sola tarea de VBScript que
se correrara para cada una de las filas. Mucha mas facil de programa,
bastante mas lento que el de SQL pero de rendimiento aceptable. Mas facil de
dar mantenimiento y puedes despedir al dba.
c) Lo mantienes como esta:
i) creas una tarea de VBScript o una de Propiedad Dinamica que
Inicie el Ciclo, asignas el valor inicial a la variable
ii) Creas otra tarea de VBScript que marque el inicio del While (en
VBScript), las unes con flujo de cuanto completado con exito.
iii) Conectas el inicio del While con el resto de tu DTS. con un
flujo de completado con Exito.
iv) Creas una Tarea de VBScript, que compara el valor actual de la
variable y si no ha terminado incrementas en 1 y cambias el status del DTS
de inicio del ciclo a DTSStepExecStat_Waiting
v) Conectas el final del resto de tu DTS a la tarea final.
Es mas facil ayudarte si nos cuentas QUE quieres hacer en vez de COMO lo
quieres hacer, ya que con frecuencia hay mas de una forma de resolver el
problema y en este caso me parece que la opcion c) es demasiado compleja
para el problema.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda


"Inma" wrote in message
news:
Hola a

Tengo una duda relacionada con el paso de parámetros en un dts.
He creado varios dts, que aplican una serie de cálculos a una tabla
después de varias tareas de transformación de datos. Resulta que las
sentencias de estos cálculos son idénticas en todos estos dts, excepto
en el "where" donde cada dts modifica las filas donde el valor del
campo "id" sea n (n tiene un valor diferente en cada DTS). Por lo que
se ha decidido hacer un dts tenérico exlusivamente con los cálculos, y
llamar a este paquete desde los diferentes dts pasándole como
parámetro el valor del campo "id" correspondiente, así si hay un
cambio en alguno de los cálculos sólo habrá que modificar un dts, y no
todos los dts que utilizan estos cálculos.
Entonces he creado este dts genérico con los cálculos. He definido
"id" como variable global. Y en las querys de update (en las que hay
subconsultas), en la cláusula "where" he puesto: "where id = ?". Pero
me muestra el siguiente error:
"Origen del error: Microsoft OLE DB Provider for SQL Server"
"Descripción del error: No se puede obtener la información de
parámetros a partir de instrucciones SQL con consultas de
subselección. Establezca la información de parámetros antes de
preparar el comando"

Alguien me podría decir por qué me muestra este error? Y cómo podría
solucionarlo?

Muchas gracias de antemano!
Un saludo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida