SQL Server - VARCHAR a DATETIME

 
Vista:

VARCHAR a DATETIME

Publicado por Carlos Reyes (49 intervenciones) el 22/06/2007 21:20:47
Hola, veran ya ando un poco perdido el dia de hoy y la verdad no se que este omitiendo; tengo estos 2 queries, el primero me marca un error de conversion, pero si ese lo migro a cadena y utilizo un exec funciona sin problemas.

Query 1 que no funciona:

SELECT @strQuery= 'SELECT R.aREM_Ref, R.aREM_Concepto,
cEMP_Formulo,R.cEMP_Autorizo,
MB.cEMP_Autorizo AS cEMP_Tesoreria,
MB.cMON_Id, MB.aMBAN_Monto,
MB.aORDREM_Id
FROM aMBAN_MovBancos MB
INNER JOIN aREM_Remesas R
ON MB.aORDREM_Id = R.aREM_Id
AND R.aREM_FecReg = CONVERT(DATETIME,'''''+@strFecReg+''''')
AND R.cTORG_Id = '+@intTipoCia+'
AND R.cCIA_Id = '+@intCiaId+'
AND R.cCIA_Ver = '+@intCiaVer+'
AND MB.cBAN_Id = '+@intBanId+'
AND MB.cCBAN_NoCuenta = '''''+@strBanCta+'''''
AND MB.aMBAN_FechaPago = CONVERT(DATETIME,'''''+@strFecDep+''''')
AND MB.aMBAN_TipoMov = 2'

EXEC(@strQuery)



Query 2(Si funciona):

EXEC('SELECT R.aREM_Ref, R.aREM_Concepto, cEMP_Formulo,
R.cEMP_Autorizo, MB.cEMP_Autorizo AS cEMP_Tesoreria, MB.cMON_Id, MB.aMBAN_Monto,
MB.aORDREM_Id
FROM aMBAN_MovBancos MB
INNER JOIN aREM_Remesas R
ON MB.aORDREM_Id = R.aREM_Id
AND R.aREM_FecReg = CONVERT(DATETIME,''22/06/2007'')
AND R.cTORG_Id = 1
AND R.cCIA_Id = 1
AND R.cCIA_Ver = 0
AND MB.cBAN_Id = 5
AND MB.cCBAN_NoCuenta = ''012346548156''
AND MB.aMBAN_FechaPago = CONVERT(DATETIME,''22/06/2007'')
AND MB.aMBAN_TipoMov = 2')


Lo que no entiendo es por que me marca el error de conversion si lo que mando en el primer query convertido a cadena da exactamente el mismo resultado, alguna idea???

strFecDep y strFecReg son variables de tipo varchar; ya intente incrementando el tamaño pero no se corrige

Carlos Reyes
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:VARCHAR a DATETIME

Publicado por Isaias (3308 intervenciones) el 22/06/2007 23:49:58
Olvidate del EXEC(STRING), ya no estara disponible en otras versiones superiores, te aconsejo que leas un poco sobre el manejo de fechas.

http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art157.asp

Para el efecto, funciona

declare @sqlstring nvarchar(1000)
declare @strFecReg varchar(8)
declare @strFecDep varchar(8)
declare @intTipoCia char(1)

set @strFecReg = '20070622'
set @strFecDep = '20070622'
set @intTipoCia = '9'

set @sqlstring = 'SELECT R.aREM_Ref, R.aREM_Concepto,
cEMP_Formulo,R.cEMP_Autorizo,
MB.cEMP_Autorizo AS cEMP_Tesoreria,
MB.cMON_Id, MB.aMBAN_Monto,
MB.aORDREM_Id
FROM aMBAN_MovBancos MB
INNER JOIN aREM_Remesas R
ON MB.aORDREM_Id = R.aREM_Id
AND R.aREM_FecReg = CONVERT(DATETIME,'+char(39)+@strFecReg+char(39)+')
AND R.cTORG_Id = '+@intTipoCia+'
AND R.cCIA_Id = '+@intTipoCia+'
AND R.cCIA_Ver = '+@intTipoCia+'
AND MB.cBAN_Id = '+@intTipoCia+'
AND MB.cCBAN_NoCuenta = '+@intTipoCia+'
AND MB.aMBAN_FechaPago = CONVERT(DATETIME,'+char(39)+@strFecDep+char(39)+')
AND MB.aMBAN_TipoMov = 2'

execute sp_executesql @sqlstring
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:VARCHAR a DATETIME

Publicado por Carlos Reyes (4 intervenciones) el 26/06/2007 20:45:18
Te agradezco Isaias, funciono a la perfeccion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:VARCHAR a DATETIME

Publicado por Isaias (3308 intervenciones) el 26/06/2007 21:38:01
De nada, es un placer
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar