variables globales en un DTS

27/06/2007 - 15:39 por Victor | Informe spam
Hola a tod@s.

He declarado este DTS que lo que hace es volcar el las filas de la consulta
de abajo en un fichero.

SELECT RIGHT(dbo.F_Tarjeta_Embarque(grup_codi, bil_id, 12), 12) + case
grup_codi when bil_grupoida then bil_cupon_ida else bil_cupon_vuelta end +
lin_codsap + '972' + '972' + convert(char(10), grup_fechsa, 103) + ' ' +
convert(char(5), grup_horasa, 108) +
cast(tap_tip_id as char(1)) + CASE tir_porcentaje WHEN 0 THEN '00' ELSE
bip_doc_id END + isnull(replicate('0', 12 - len(bip_dni)) + bip_dni,
'000000000000') +
upper(bip_nombre + ' ' + bip_apell1 + ' ' + bip_apell2) AS PARTE4--, @email
AS email
FROM ic_billetes
INNER JOIN ic_grupoviaje ON grup_codi IN (bil_grupoida, bil_grupovuelta)
INNER JOIN ic_linea ON lin_codlin = grup_codlin
INNER JOIN ic_bilper ON bip_bil_id = bil_id
INNER JOIN ic_tarpax ON tap_id = bip_tap_id_i
INNER JOIN ic_tipres ON tir_id = bip_tir_id
WHERE (grup_codi = ?) AND (bil_estado = 'E') AND (bil_tipo <> 'C')

El parámetro global está definido como un Integer y se llama viaje., y por
defecto vale -1. En el diseñador del DTS, si el pongo un valor correcto a
viaje y lo ejecuto funciona bien, pero dejo -1 y desde el analizador de
consultas realizo la siguiente llamada:

EXEC master..XP_CMDSHELL 'DTSRUN /Slocalhost /Nprueba_aarchivo
/A''viaje'':''3''=''32962'' /E'

(como veis le paso el valor 32962 a la variable global) pues no devuelve
nada (supongo que utiliza el -1 como valor y no lee el que yo le paso).

¿Qué falla?

Es el SQLServer 2000.

Y puestos a preguntar: ¿hay forma de especificarle desde el DTSRun el nombre
del fichero (ahroa se llama prueba.txt pero el nombre cada vez cambia) donde
ha de guardar los datos?

Muchas gracias por la ayuda.

Víctor.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
27/06/2007 - 16:46 | Informe spam
Hola Victor,

Para pasar valor a las variables globales, el paquete debe haberse guardado
sin proteccion de password y ademas debes tener permiso de dueño del paquete.
Debes encerrar la cadena con doble comilla y no doble apostrofe como estas
haciendo ahora.

/A''viaje'':''3''=''32962''



/A"viaje:32962"

En cuanto a cambiar el nombre del archivo, puedes usar una variable global y
una tarea ActiveX script para cambiar la propiedad "DataSource" de la
conexion al archivo.

Ejemplo:

Crear paquete llamado "test". Crear dos variables globales var1 int y var2
string. Crear conexion a tu SQL Server local, a la db northwind. Crear
conexion al archivo texto de salida y nombrarla "Text File (Destination)".
Usar una tarea de transformacion desde la conexion SQL hacia la conexion
archivo de texto. Usa le sgte query:

select *
from dbo.orders
where orderid = ?

Asocia el parametro con la variable global var1.

Crea una tarea AvticeX script y pon esto en el script:

Function Main()
Dim bError
Dim oConn

Set oConn = DTSGlobalVariables.Parent.Connections("Text File (Destination)")

oConn.DataSource = DTSGlobalVariables("var2").Value

Set oConn = Nothing

Main = DTSTaskExecResult_Success
End Function

Salva el paquete y ejecuta esto desde el propmt:

C:\Temp>dtsrun.exe /S"(local)" /E /N"test" /A"var1:3250"
/A"var2:8=c:\temp\te
st_1.csv"

C:\Temp>dtsrun.exe /S"(local)" /E /N"test" /A"var1:3260"
/A"var2:8=c:\temp\te
st_2.csv"


AMB

"Victor" wrote:

Hola a

He declarado este DTS que lo que hace es volcar el las filas de la consulta
de abajo en un fichero.

SELECT RIGHT(dbo.F_Tarjeta_Embarque(grup_codi, bil_id, 12), 12) + case
grup_codi when bil_grupoida then bil_cupon_ida else bil_cupon_vuelta end +
lin_codsap + '972' + '972' + convert(char(10), grup_fechsa, 103) + ' ' +
convert(char(5), grup_horasa, 108) +
cast(tap_tip_id as char(1)) + CASE tir_porcentaje WHEN 0 THEN '00' ELSE
bip_doc_id END + isnull(replicate('0', 12 - len(bip_dni)) + bip_dni,
'000000000000') +
upper(bip_nombre + ' ' + bip_apell1 + ' ' + bip_apell2) AS PARTE4--, @email
AS email
FROM ic_billetes
INNER JOIN ic_grupoviaje ON grup_codi IN (bil_grupoida, bil_grupovuelta)
INNER JOIN ic_linea ON lin_codlin = grup_codlin
INNER JOIN ic_bilper ON bip_bil_id = bil_id
INNER JOIN ic_tarpax ON tap_id = bip_tap_id_i
INNER JOIN ic_tipres ON tir_id = bip_tir_id
WHERE (grup_codi = ?) AND (bil_estado = 'E') AND (bil_tipo <> 'C')

El parámetro global está definido como un Integer y se llama viaje., y por
defecto vale -1. En el diseñador del DTS, si el pongo un valor correcto a
viaje y lo ejecuto funciona bien, pero dejo -1 y desde el analizador de
consultas realizo la siguiente llamada:

EXEC master..XP_CMDSHELL 'DTSRUN /Slocalhost /Nprueba_aarchivo
/A''viaje'':''3''=''32962'' /E'

(como veis le paso el valor 32962 a la variable global) pues no devuelve
nada (supongo que utiliza el -1 como valor y no lee el que yo le paso).

¿Qué falla?

Es el SQLServer 2000.

Y puestos a preguntar: ¿hay forma de especificarle desde el DTSRun el nombre
del fichero (ahroa se llama prueba.txt pero el nombre cada vez cambia) donde
ha de guardar los datos?

Muchas gracias por la ayuda.

Víctor.



Respuesta Responder a este mensaje
#2 Victor
28/06/2007 - 11:50 | Informe spam
Muchas gracias.

No se nada de programar ActiveX, pero con tu ejmeplo ahora mismo voy a ello.


"Alejandro Mesa" escribió en el
mensaje news:
Hola Victor,

Para pasar valor a las variables globales, el paquete debe haberse


guardado
sin proteccion de password y ademas debes tener permiso de dueño del


paquete.
Debes encerrar la cadena con doble comilla y no doble apostrofe como estas
haciendo ahora.

> /A''viaje'':''3''=''32962''

/A"viaje:32962"

En cuanto a cambiar el nombre del archivo, puedes usar una variable global


y
una tarea ActiveX script para cambiar la propiedad "DataSource" de la
conexion al archivo.

Ejemplo:

Crear paquete llamado "test". Crear dos variables globales var1 int y var2
string. Crear conexion a tu SQL Server local, a la db northwind. Crear
conexion al archivo texto de salida y nombrarla "Text File (Destination)".
Usar una tarea de transformacion desde la conexion SQL hacia la conexion
archivo de texto. Usa le sgte query:

select *
from dbo.orders
where orderid = ?

Asocia el parametro con la variable global var1.

Crea una tarea AvticeX script y pon esto en el script:

Function Main()
Dim bError
Dim oConn

Set oConn = DTSGlobalVariables.Parent.Connections("Text File


(Destination)")

oConn.DataSource = DTSGlobalVariables("var2").Value

Set oConn = Nothing

Main = DTSTaskExecResult_Success
End Function

Salva el paquete y ejecuta esto desde el propmt:

C:\Temp>dtsrun.exe /S"(local)" /E /N"test" /A"var1:3250"
/A"var2:8=c:\temp\te
st_1.csv"

C:\Temp>dtsrun.exe /S"(local)" /E /N"test" /A"var1:3260"
/A"var2:8=c:\temp\te
st_2.csv"


AMB

"Victor" wrote:

> Hola a
>
> He declarado este DTS que lo que hace es volcar el las filas de la


consulta
> de abajo en un fichero.
>
> SELECT RIGHT(dbo.F_Tarjeta_Embarque(grup_codi, bil_id, 12), 12) + case
> grup_codi when bil_grupoida then bil_cupon_ida else bil_cupon_vuelta end


+
> lin_codsap + '972' + '972' + convert(char(10), grup_fechsa, 103) + ' '


+
> convert(char(5), grup_horasa, 108) +
> cast(tap_tip_id as char(1)) + CASE tir_porcentaje WHEN 0 THEN '00' ELSE
> bip_doc_id END + isnull(replicate('0', 12 - len(bip_dni)) + bip_dni,
> '000000000000') +
> upper(bip_nombre + ' ' + bip_apell1 + ' ' + bip_apell2) AS PARTE4--,


@email
> AS email
> FROM ic_billetes
> INNER JOIN ic_grupoviaje ON grup_codi IN (bil_grupoida,


bil_grupovuelta)
> INNER JOIN ic_linea ON lin_codlin = grup_codlin
> INNER JOIN ic_bilper ON bip_bil_id = bil_id
> INNER JOIN ic_tarpax ON tap_id = bip_tap_id_i
> INNER JOIN ic_tipres ON tir_id = bip_tir_id
> WHERE (grup_codi = ?) AND (bil_estado = 'E') AND (bil_tipo <> 'C')
>
> El parámetro global está definido como un Integer y se llama viaje., y


por
> defecto vale -1. En el diseñador del DTS, si el pongo un valor correcto


a
> viaje y lo ejecuto funciona bien, pero dejo -1 y desde el analizador de
> consultas realizo la siguiente llamada:
>
> EXEC master..XP_CMDSHELL 'DTSRUN /Slocalhost /Nprueba_aarchivo
> /A''viaje'':''3''=''32962'' /E'
>
> (como veis le paso el valor 32962 a la variable global) pues no devuelve
> nada (supongo que utiliza el -1 como valor y no lee el que yo le paso).
>
> ¿Qué falla?
>
> Es el SQLServer 2000.
>
> Y puestos a preguntar: ¿hay forma de especificarle desde el DTSRun el


nombre
> del fichero (ahroa se llama prueba.txt pero el nombre cada vez cambia)


donde
> ha de guardar los datos?
>
> Muchas gracias por la ayuda.
>
> Víctor.
>
>
>
Respuesta Responder a este mensaje
#3 Victor
29/06/2007 - 13:46 | Informe spam
Hola Alejandro.

Lo he probado y funciona, excepto el cambio del nombre del fichero.

EL ActiveX (AX), ¿no tengo que asociarlo a algo? He probado una unión del
fichero destino (que por cierto, al crearlo me obliga a ponerle un nombre al
fichero (pongo c:\prueba.txt) y es el que al final me muestra los datos) al
AX en caso de éxito, pero nada.

Ahora el dibujo es de la conexión BDD una transformación al fichero de
destino (hay una flecha), y suelto el AX.

Gracias.

"Alejandro Mesa" escribió en el
mensaje news:
Hola Victor,

Para pasar valor a las variables globales, el paquete debe haberse


guardado
sin proteccion de password y ademas debes tener permiso de dueño del


paquete.
Debes encerrar la cadena con doble comilla y no doble apostrofe como estas
haciendo ahora.

> /A''viaje'':''3''=''32962''

/A"viaje:32962"

En cuanto a cambiar el nombre del archivo, puedes usar una variable global


y
una tarea ActiveX script para cambiar la propiedad "DataSource" de la
conexion al archivo.

Ejemplo:

Crear paquete llamado "test". Crear dos variables globales var1 int y var2
string. Crear conexion a tu SQL Server local, a la db northwind. Crear
conexion al archivo texto de salida y nombrarla "Text File (Destination)".
Usar una tarea de transformacion desde la conexion SQL hacia la conexion
archivo de texto. Usa le sgte query:

select *
from dbo.orders
where orderid = ?

Asocia el parametro con la variable global var1.

Crea una tarea AvticeX script y pon esto en el script:

Function Main()
Dim bError
Dim oConn

Set oConn = DTSGlobalVariables.Parent.Connections("Text File


(Destination)")

oConn.DataSource = DTSGlobalVariables("var2").Value

Set oConn = Nothing

Main = DTSTaskExecResult_Success
End Function

Salva el paquete y ejecuta esto desde el propmt:

C:\Temp>dtsrun.exe /S"(local)" /E /N"test" /A"var1:3250"
/A"var2:8=c:\temp\te
st_1.csv"

C:\Temp>dtsrun.exe /S"(local)" /E /N"test" /A"var1:3260"
/A"var2:8=c:\temp\te
st_2.csv"


AMB

"Victor" wrote:

> Hola a
>
> He declarado este DTS que lo que hace es volcar el las filas de la


consulta
> de abajo en un fichero.
>
> SELECT RIGHT(dbo.F_Tarjeta_Embarque(grup_codi, bil_id, 12), 12) + case
> grup_codi when bil_grupoida then bil_cupon_ida else bil_cupon_vuelta end


+
> lin_codsap + '972' + '972' + convert(char(10), grup_fechsa, 103) + ' '


+
> convert(char(5), grup_horasa, 108) +
> cast(tap_tip_id as char(1)) + CASE tir_porcentaje WHEN 0 THEN '00' ELSE
> bip_doc_id END + isnull(replicate('0', 12 - len(bip_dni)) + bip_dni,
> '000000000000') +
> upper(bip_nombre + ' ' + bip_apell1 + ' ' + bip_apell2) AS PARTE4--,


@email
> AS email
> FROM ic_billetes
> INNER JOIN ic_grupoviaje ON grup_codi IN (bil_grupoida,


bil_grupovuelta)
> INNER JOIN ic_linea ON lin_codlin = grup_codlin
> INNER JOIN ic_bilper ON bip_bil_id = bil_id
> INNER JOIN ic_tarpax ON tap_id = bip_tap_id_i
> INNER JOIN ic_tipres ON tir_id = bip_tir_id
> WHERE (grup_codi = ?) AND (bil_estado = 'E') AND (bil_tipo <> 'C')
>
> El parámetro global está definido como un Integer y se llama viaje., y


por
> defecto vale -1. En el diseñador del DTS, si el pongo un valor correcto


a
> viaje y lo ejecuto funciona bien, pero dejo -1 y desde el analizador de
> consultas realizo la siguiente llamada:
>
> EXEC master..XP_CMDSHELL 'DTSRUN /Slocalhost /Nprueba_aarchivo
> /A''viaje'':''3''=''32962'' /E'
>
> (como veis le paso el valor 32962 a la variable global) pues no devuelve
> nada (supongo que utiliza el -1 como valor y no lee el que yo le paso).
>
> ¿Qué falla?
>
> Es el SQLServer 2000.
>
> Y puestos a preguntar: ¿hay forma de especificarle desde el DTSRun el


nombre
> del fichero (ahroa se llama prueba.txt pero el nombre cada vez cambia)


donde
> ha de guardar los datos?
>
> Muchas gracias por la ayuda.
>
> Víctor.
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida