Problema con funcion traduce los numerod a letras

18/09/2008 - 21:16 por Mauricio A. | Informe spam
Buenas tardes a todos.

Tengo un problema con SQL 2005 en una funcion que traduce los numeros a
letras. Esta funcion la tenia trabajando perfectamente en SQL 2000 y no se
porque razón aqui la no funciona.

Esta funcion se compone de 10 funciones que van traduciendo unidades,
decenas y centenas hasta los millones, ejemplo:

select dbo.CantidadEnLetras(1973454)

Pero al ejecutarla no termina y se queda como si estuviera trabajando, pero
si ejecuto primero algunas de las iniciales por ejemplo:

select dbo.CentenasEnLetras(454)
select dbo.CentenasDeMillarEnLetras(973454)
select dbo.CantidadEnLetras(761973454)

Asi ya funciona, pero esto despues de un rato sigue sin funcionar otra vez.

No agrego el script de mis funciones porque excede el texto permitido, pero
son 10 funciones dependientes entre si:

CentenasDeMillonEnLetras
DecenasDeMillonEnLetras
UnidadesDeMillonEnLetras
CentenasDeMillarEnLetras
DecenasDeMillarEnLetras
UnidadesDeMillarEnLetras
CentenasEnLetras
DecenasEnLetras
UnidadesEnLetras
CantidadEnLetras

La ultima es la principal (CantidadEnLetras).

Si alguien desea les mandaré su script a su correo personal ya que no pude
adjuntarlo aqui.

Si alguien sabe a que se debe les agradeceria mucho sus tips.

Saludos...

Preguntas similare

Leer las respuestas

#1 Rubén Garrigós
19/09/2008 - 02:05 | Informe spam
Mauricio, sin más datos sobre las funciones difícilmente podremos ayudarte.
Imagino que el código de cada una de las dependientes será similar entre si.
¿Podrías adjuntar la función CantidadEnLetras y un par de las otras (por
ejemplo
UnidadesEnLetras y CentenasDeMillarEnLetras?

El hecho que sí te funcione a veces da que pensar que el problema pueda
venir por bloqueos o algún otro problema puntual.

Rubén Garrigós
Solid Quality Mentos

"Mauricio A." wrote:

Buenas tardes a todos.

Tengo un problema con SQL 2005 en una funcion que traduce los numeros a
letras. Esta funcion la tenia trabajando perfectamente en SQL 2000 y no se
porque razón aqui la no funciona.

Esta funcion se compone de 10 funciones que van traduciendo unidades,
decenas y centenas hasta los millones, ejemplo:

select dbo.CantidadEnLetras(1973454)

Pero al ejecutarla no termina y se queda como si estuviera trabajando, pero
si ejecuto primero algunas de las iniciales por ejemplo:

select dbo.CentenasEnLetras(454)
select dbo.CentenasDeMillarEnLetras(973454)
select dbo.CantidadEnLetras(761973454)

Asi ya funciona, pero esto despues de un rato sigue sin funcionar otra vez.

No agrego el script de mis funciones porque excede el texto permitido, pero
son 10 funciones dependientes entre si:

CentenasDeMillonEnLetras
DecenasDeMillonEnLetras
UnidadesDeMillonEnLetras
CentenasDeMillarEnLetras
DecenasDeMillarEnLetras
UnidadesDeMillarEnLetras
CentenasEnLetras
DecenasEnLetras
UnidadesEnLetras
CantidadEnLetras

La ultima es la principal (CantidadEnLetras).

Si alguien desea les mandaré su script a su correo personal ya que no pude
adjuntarlo aqui.

Si alguien sabe a que se debe les agradeceria mucho sus tips.

Saludos...




Respuesta Responder a este mensaje
#2 Mauricio A.
19/09/2008 - 02:17 | Informe spam
Me parece correcta tu observación Rubén y gracias por contestar. Lo que voy a
hacer es que voy a adjuntar por partes hasta mandar todo el codigo para que
se pueda analizar mejor ya que todos son dependientes. Aqui te mando la
primera parte:


SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION UnidadesEnLetras (@CantidadP Numeric(3,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(1)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),1)
RETURN
(CASE WHEN @Cantidad >= 0 and @Cantidad <= 9 THEN
Case When @Cantidad = 0 then ''
When @Cantidad = 1 then 'UN'
when @Cantidad = 2 then 'DOS'
when @Cantidad = 3 then 'TRES'
when @Cantidad = 4 then 'CUATRO'
when @Cantidad = 5 then 'CINCO'
when @Cantidad = 6 then 'SEIS'
when @Cantidad = 7 then 'SIETE'
when @Cantidad = 8 then 'OCHO'
when @Cantidad = 9 then 'NUEVE'
END
ELSE '' END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION DecenasEnLetras (@CantidadP Numeric(4,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(2)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),2)
RETURN
(CASE WHEN @Cantidad >= 10 and @Cantidad <= 99 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
Case When @Cantidad = 10 then 'DIEZ'
When @Cantidad = 11 then 'ONCE'
When @Cantidad = 12 then 'DOCE'
When @Cantidad = 13 then 'TRECE'
When @Cantidad = 14 then 'CATORCE'
When @Cantidad = 15 then 'QUINCE'
When @Cantidad < 20 then 'DIEZ Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 2 then
Case When @Cantidad = 20 then 'VEINTE '
When @Cantidad > 20 then 'VEINTE Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 3 then
Case When @Cantidad = 30 then 'TREINTA '
When @Cantidad > 30 then 'TREINTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 4 then
Case When @Cantidad = 40 then 'CUARENTA '
When @Cantidad > 40 then 'CUARENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 5 then
Case When @Cantidad = 50 then 'CINCUENTA '
When @Cantidad > 50 then 'CINCUENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 6 then
Case When @Cantidad = 60 then 'SESENTA '
When @Cantidad > 60 then 'SESENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 7 then
Case When @Cantidad = 70 then 'SETENTA '
When @Cantidad > 70 then 'SETENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 8 then
Case When @Cantidad = 80 then 'OCHENTA '
When @Cantidad > 80 then 'OCHENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 9 then
Case When @Cantidad = 90 then 'NOVENTA '
When @Cantidad > 90 then 'NOVENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
END
ELSE
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION CentenasEnLetras (@CantidadP Numeric(5,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(3)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),3)
RETURN
(CASE WHEN @Cantidad >= 100 and @Cantidad <= 999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
Case When @Cantidad = 100 then 'CIEN '
When @Cantidad > 100 then 'CIENTO ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 2 then
Case When @Cantidad = 200 then 'DOSCIENTOS '
When @Cantidad > 200 then 'DOSCIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 3 then
Case When @Cantidad = 300 then 'TRESCIENTOS '
When @Cantidad > 300 then 'TRESCIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 4 then
Case When @Cantidad = 400 then 'CUATROCIENTOS '
When @Cantidad > 400 then 'CUATROCIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 5 then
Case When @Cantidad = 500 then 'QUINIENTOS '
When @Cantidad > 500 then 'QUINIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 6 then
Case When @Cantidad = 600 then 'SEISCIENTOS '
When @Cantidad > 600 then 'SEISCIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 7 then
Case When @Cantidad = 700 then 'SETECIENTOS '
When @Cantidad > 700 then 'SETECIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 8 then
Case When @Cantidad = 800 then 'OCHOCIENTOS '
When @Cantidad > 800 then 'OCHOCIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 9 then
Case When @Cantidad = 900 then 'NOVECIENTOS '
When @Cantidad > 900 then 'NOVECIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
END
ELSE
case when len(cast(@Cantidad as varchar)) = 2 then
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
when len(cast(@Cantidad as varchar)) = 1 then
dbo.UnidadesEnLetras(right(cast(@Cantidad as varchar),1))
END
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION UnidadesDeMillarEnLetras (@CantidadP Numeric(6,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(4)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),4)
RETURN
(CASE WHEN @Cantidad >= 1000 and @Cantidad <= 9999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
'UN MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 2 then
'DOS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 3 then
'TRES MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 4 then
'CUATRO MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 5 then
'CINCO MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 6 then
'SEIS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 7 then
'SIETE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 8 then
'OCHO MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 9 then
'NUEVE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
END
ELSE
case when len(cast(@Cantidad as varchar)) = 3 then
dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
when len(cast(@Cantidad as varchar)) = 2 then
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
when len(cast(@Cantidad as varchar)) = 1 then
dbo.UnidadesEnLetras(right(cast(@Cantidad as varchar),1))
END
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION DecenasDeMillarEnLetras (@CantidadP Numeric(7,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(5)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),5)
RETURN
(CASE WHEN @Cantidad >= 10000 and @Cantidad <= 99999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 10 then
'DIEZ MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 11 then 'ONCE
MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 12 then 'DOCE
MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 13 then
'TRECE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 14 then
'CATORCE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 15 then
'QUINCE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) < 20 then 'DIEZ
Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 2 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 20 then
'VEINTE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 20 then
'VEINTE Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 3 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 30 then
'TREINTA MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 30 then
'TREINTA Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 4 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 40 then
'CUARENTA MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 40 then
'CUARENTA Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 5 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 50 then
'CINCUENTA MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 50 then
'CINCUENTA Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 6 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 60 then
'SESENTA MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 60 then
'SESENTA Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 7 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 70 then
'SETENTA MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 70 then
'SETENTA Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 8 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 80 then
'OCHENTA MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 80 then
'OCHENTA Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 9 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 90 then
'NOVENTA MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 90 then
'NOVENTA Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
END
ELSE
case when len(cast(@Cantidad as varchar)) = 4 then
dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as varchar),4))
when len(cast(@Cantidad as varchar)) = 3 then
dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
when len(cast(@Cantidad as varchar)) = 2 then
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
when len(cast(@Cantidad as varchar)) = 1 then
dbo.UnidadesEnLetras(right(cast(@Cantidad as varchar),1))
END
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION CentenasDeMillarEnLetras (@CantidadP Numeric(8,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(6)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),6)
RETURN
(CASE WHEN @Cantidad >= 100000 and @Cantidad <= 999999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 100 then
'CIEN MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 100 then
'CIENTO ' + dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 2 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 200 then
'DOSCIENTOS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 200 then
'DOSCIENTOS ' + dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 3 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 300 then
'TRESCIENTOS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as
varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 300 then
'TRESCIENTOS ' + dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 4 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 400 then
'CUATROCIENTOS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as
varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 400 then
'CUATROCIENTOS ' + dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 5 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 500 then
'QUINIENTOS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 500 then
'QUINIENTOS ' + dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 6 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 600 then
'SEISCIENTOS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as
varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 600 then
'SEISCIENTOS ' + dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 7 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 700 then
'SETECIENTOS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as
varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 700 then
'SETECIENTOS ' + dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 8 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 800 then
'OCHOCIENTOS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as
varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 800 then
'OCHOCIENTOS ' + dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 9 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 900 then
'NOVECIENTOS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as
varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 900 then
'NOVECIENTOS ' + dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),5))
End
END
ELSE
case when len(cast(@Cantidad as varchar)) = 5 then
dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as varchar),5))
when len(cast(@Cantidad as varchar)) = 4 then
dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as varchar),4))
when len(cast(@Cantidad as varchar)) = 3 then
dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
when len(cast(@Cantidad as varchar)) = 2 then
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
when len(cast(@Cantidad as varchar)) = 1 then
dbo.UnidadesEnLetras(right(cast(@Cantidad as varchar),1))
END
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION UnidadesDeMillonEnLetras (@CantidadP Numeric(9,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(7)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),7)
RETURN
(CASE WHEN @Cantidad >= 1000000 and @Cantidad <= 9999999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
'UN MILLON ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When Left(cast(@Cantidad as varchar),1) = 2 then
'DOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When Left(cast(@Cantidad as varchar),1) = 3 then
'TRES MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When Left(cast(@Cantidad as varchar),1) = 4 then
'CUATRO MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When Left(cast(@Cantidad as varchar),1) = 5 then
'CINCO MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When Left(cast(@Cantidad as varchar),1) = 6 then
'SEIS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When Left(cast(@Cantidad as varchar),1) = 7 then
'SIETE MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When Left(cast(@Cantidad as varchar),1) = 8 then
'OCHO MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When Left(cast(@Cantidad as varchar),1) = 9 then
'NUEVE MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
END
ELSE
case when len(cast(@Cantidad as varchar)) = 6 then
dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as varchar),6))
when len(cast(@Cantidad as varchar)) = 5 then
dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as varchar),5))
when len(cast(@Cantidad as varchar)) = 4 then
dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as varchar),4))
when len(cast(@Cantidad as varchar)) = 3 then
dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
when len(cast(@Cantidad as varchar)) = 2 then
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
when len(cast(@Cantidad as varchar)) = 1 then
dbo.UnidadesEnLetras(right(cast(@Cantidad as varchar),1))
END
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


"Rubén Garrigós" wrote:

Mauricio, sin más datos sobre las funciones difícilmente podremos ayudarte.
Imagino que el código de cada una de las dependientes será similar entre si.
¿Podrías adjuntar la función CantidadEnLetras y un par de las otras (por
ejemplo
UnidadesEnLetras y CentenasDeMillarEnLetras?

El hecho que sí te funcione a veces da que pensar que el problema pueda
venir por bloqueos o algún otro problema puntual.

Rubén Garrigós
Solid Quality Mentos

"Mauricio A." wrote:

> Buenas tardes a todos.
>
> Tengo un problema con SQL 2005 en una funcion que traduce los numeros a
> letras. Esta funcion la tenia trabajando perfectamente en SQL 2000 y no se
> porque razón aqui la no funciona.
>
> Esta funcion se compone de 10 funciones que van traduciendo unidades,
> decenas y centenas hasta los millones, ejemplo:
>
> select dbo.CantidadEnLetras(1973454)
>
> Pero al ejecutarla no termina y se queda como si estuviera trabajando, pero
> si ejecuto primero algunas de las iniciales por ejemplo:
>
> select dbo.CentenasEnLetras(454)
> select dbo.CentenasDeMillarEnLetras(973454)
> select dbo.CantidadEnLetras(761973454)
>
> Asi ya funciona, pero esto despues de un rato sigue sin funcionar otra vez.
>
> No agrego el script de mis funciones porque excede el texto permitido, pero
> son 10 funciones dependientes entre si:
>
> CentenasDeMillonEnLetras
> DecenasDeMillonEnLetras
> UnidadesDeMillonEnLetras
> CentenasDeMillarEnLetras
> DecenasDeMillarEnLetras
> UnidadesDeMillarEnLetras
> CentenasEnLetras
> DecenasEnLetras
> UnidadesEnLetras
> CantidadEnLetras
>
> La ultima es la principal (CantidadEnLetras).
>
> Si alguien desea les mandaré su script a su correo personal ya que no pude
> adjuntarlo aqui.
>
> Si alguien sabe a que se debe les agradeceria mucho sus tips.
>
> Saludos...
>
>
>
>
Respuesta Responder a este mensaje
#3 Mauricio A.
19/09/2008 - 02:18 | Informe spam
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION DecenasDeMillonEnLetras (@CantidadP Numeric(10,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(8)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),8)
RETURN
(CASE WHEN @Cantidad >= 10000000 and @Cantidad <= 99999999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 10 then
'DIEZ MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 11 then 'ONCE
MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 12 then 'DOCE
MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 13 then
'TRECE MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 14 then
'CATORCE MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 15 then
'QUINCE MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) < 20 then 'DIEZ
Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 2 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 20 then
'VEINTE MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 20 then
'VEINTE Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 3 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 30 then
'TREINTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 30 then
'TREINTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 4 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 40 then
'CUARENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 40 then
'CUARENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 5 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 50 then
'CINCUENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 50 then
'CINCUENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 6 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 60 then
'SESENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 60 then
'SESENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 7 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 70 then
'SETENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 70 then
'SETENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 8 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 80 then
'OCHENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 80 then
'OCHENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 9 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 90 then
'NOVENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 90 then
'NOVENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
END
ELSE
case when len(cast(@Cantidad as varchar)) = 7 then
dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as varchar),7))
when len(cast(@Cantidad as varchar)) = 6 then
dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as varchar),6))
when len(cast(@Cantidad as varchar)) = 5 then
dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as varchar),5))
when len(cast(@Cantidad as varchar)) = 4 then
dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as varchar),4))
when len(cast(@Cantidad as varchar)) = 3 then
dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
when len(cast(@Cantidad as varchar)) = 2 then
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
when len(cast(@Cantidad as varchar)) = 1 then
dbo.UnidadesEnLetras(right(cast(@Cantidad as varchar),1))
END
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION CentenasDeMillonEnLetras (@CantidadP Numeric(11,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(9)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),9)
RETURN
(CASE WHEN @Cantidad >= 100000000 and @Cantidad <= 999999999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 100 then
'CIEN MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 100 then
'CIENTO ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as varchar),8))
End
When Left(cast(@Cantidad as varchar),1) = 2 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 200 then
'DOSCIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 200 then
'DOSCIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 3 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 300 then
'TRESCIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 300 then
'TRESCIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 4 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 400 then
'CUATROCIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 400 then
'CUATROCIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 5 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 500 then
'QUINIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 500 then
'QUINIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 6 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 600 then
'SEISCIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 600 then
'SEISCIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 7 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 700 then
'SETECIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 700 then
'SETECIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 8 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 800 then
'OCHOCIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 800 then
'OCHOCIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 9 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 900 then
'NOVECIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 900 then
'NOVECIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
END
ELSE
case when len(cast(@Cantidad as varchar)) = 8 then
dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as varchar),8))
when len(cast(@Cantidad as varchar)) = 7 then
dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as varchar),7))
when len(cast(@Cantidad as varchar)) = 6 then
dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as varchar),6))
when len(cast(@Cantidad as varchar)) = 5 then
dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as varchar),5))
when len(cast(@Cantidad as varchar)) = 4 then
dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as varchar),4))
when len(cast(@Cantidad as varchar)) = 3 then
dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
when len(cast(@Cantidad as varchar)) = 2 then
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
when len(cast(@Cantidad as varchar)) = 1 then
dbo.UnidadesEnLetras(right(cast(@Cantidad as varchar),1))
END
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION CantidadEnLetras (@CantidadP Decimal(19,2))
RETURNS varchar(500)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(17)
SET @Cantidad = LEFT(@CantidadP,charindex('.',@CantidadP)-1)
RETURN
( REPLACE
( '(' + dbo.CentenasDeMillonEnLetras(@Cantidad) + ' PESOS ' +
right(cast(@CantidadP as varchar),2) +
'/100 M.N.)'
,' ', ' '
)
)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


"Mauricio A." wrote:

Me parece correcta tu observación Rubén y gracias por contestar. Lo que voy a
hacer es que voy a adjuntar por partes hasta mandar todo el codigo para que
se pueda analizar mejor ya que todos son dependientes. Aqui te mando la
primera parte:


SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION UnidadesEnLetras (@CantidadP Numeric(3,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(1)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),1)
RETURN
(CASE WHEN @Cantidad >= 0 and @Cantidad <= 9 THEN
Case When @Cantidad = 0 then ''
When @Cantidad = 1 then 'UN'
when @Cantidad = 2 then 'DOS'
when @Cantidad = 3 then 'TRES'
when @Cantidad = 4 then 'CUATRO'
when @Cantidad = 5 then 'CINCO'
when @Cantidad = 6 then 'SEIS'
when @Cantidad = 7 then 'SIETE'
when @Cantidad = 8 then 'OCHO'
when @Cantidad = 9 then 'NUEVE'
END
ELSE '' END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION DecenasEnLetras (@CantidadP Numeric(4,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(2)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),2)
RETURN
(CASE WHEN @Cantidad >= 10 and @Cantidad <= 99 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
Case When @Cantidad = 10 then 'DIEZ'
When @Cantidad = 11 then 'ONCE'
When @Cantidad = 12 then 'DOCE'
When @Cantidad = 13 then 'TRECE'
When @Cantidad = 14 then 'CATORCE'
When @Cantidad = 15 then 'QUINCE'
When @Cantidad < 20 then 'DIEZ Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 2 then
Case When @Cantidad = 20 then 'VEINTE '
When @Cantidad > 20 then 'VEINTE Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 3 then
Case When @Cantidad = 30 then 'TREINTA '
When @Cantidad > 30 then 'TREINTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 4 then
Case When @Cantidad = 40 then 'CUARENTA '
When @Cantidad > 40 then 'CUARENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 5 then
Case When @Cantidad = 50 then 'CINCUENTA '
When @Cantidad > 50 then 'CINCUENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 6 then
Case When @Cantidad = 60 then 'SESENTA '
When @Cantidad > 60 then 'SESENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 7 then
Case When @Cantidad = 70 then 'SETENTA '
When @Cantidad > 70 then 'SETENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 8 then
Case When @Cantidad = 80 then 'OCHENTA '
When @Cantidad > 80 then 'OCHENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
When Left(cast(@Cantidad as varchar),1) = 9 then
Case When @Cantidad = 90 then 'NOVENTA '
When @Cantidad > 90 then 'NOVENTA Y ' +
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
End
END
ELSE
dbo.UnidadesEnLetras(Right(cast(@Cantidad as varchar),1))
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION CentenasEnLetras (@CantidadP Numeric(5,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(3)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),3)
RETURN
(CASE WHEN @Cantidad >= 100 and @Cantidad <= 999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
Case When @Cantidad = 100 then 'CIEN '
When @Cantidad > 100 then 'CIENTO ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 2 then
Case When @Cantidad = 200 then 'DOSCIENTOS '
When @Cantidad > 200 then 'DOSCIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 3 then
Case When @Cantidad = 300 then 'TRESCIENTOS '
When @Cantidad > 300 then 'TRESCIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 4 then
Case When @Cantidad = 400 then 'CUATROCIENTOS '
When @Cantidad > 400 then 'CUATROCIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 5 then
Case When @Cantidad = 500 then 'QUINIENTOS '
When @Cantidad > 500 then 'QUINIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 6 then
Case When @Cantidad = 600 then 'SEISCIENTOS '
When @Cantidad > 600 then 'SEISCIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 7 then
Case When @Cantidad = 700 then 'SETECIENTOS '
When @Cantidad > 700 then 'SETECIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 8 then
Case When @Cantidad = 800 then 'OCHOCIENTOS '
When @Cantidad > 800 then 'OCHOCIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
When Left(cast(@Cantidad as varchar),1) = 9 then
Case When @Cantidad = 900 then 'NOVECIENTOS '
When @Cantidad > 900 then 'NOVECIENTOS ' +
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
End
END
ELSE
case when len(cast(@Cantidad as varchar)) = 2 then
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
when len(cast(@Cantidad as varchar)) = 1 then
dbo.UnidadesEnLetras(right(cast(@Cantidad as varchar),1))
END
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION UnidadesDeMillarEnLetras (@CantidadP Numeric(6,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(4)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),4)
RETURN
(CASE WHEN @Cantidad >= 1000 and @Cantidad <= 9999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
'UN MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 2 then
'DOS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 3 then
'TRES MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 4 then
'CUATRO MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 5 then
'CINCO MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 6 then
'SEIS MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 7 then
'SIETE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 8 then
'OCHO MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When Left(cast(@Cantidad as varchar),1) = 9 then
'NUEVE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
END
ELSE
case when len(cast(@Cantidad as varchar)) = 3 then
dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
when len(cast(@Cantidad as varchar)) = 2 then
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
when len(cast(@Cantidad as varchar)) = 1 then
dbo.UnidadesEnLetras(right(cast(@Cantidad as varchar),1))
END
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION DecenasDeMillarEnLetras (@CantidadP Numeric(7,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(5)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),5)
RETURN
(CASE WHEN @Cantidad >= 10000 and @Cantidad <= 99999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 10 then
'DIEZ MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 11 then 'ONCE
MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 12 then 'DOCE
MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 13 then
'TRECE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 14 then
'CATORCE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 15 then
'QUINCE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) < 20 then 'DIEZ
Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 2 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 20 then
'VEINTE MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 20 then
'VEINTE Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 3 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 30 then
'TREINTA MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 30 then
'TREINTA Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 4 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 40 then
'CUARENTA MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 40 then
'CUARENTA Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 5 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 50 then
'CINCUENTA MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 50 then
'CINCUENTA Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
When Left(cast(@Cantidad as varchar),1) = 6 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 60 then
'SESENTA MIL ' + dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 60 then
'SESENTA Y ' + dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as
varchar),4))
End
Respuesta Responder a este mensaje
#4 Mauricio A.
19/09/2008 - 02:21 | Informe spam
Parte 2:

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION DecenasDeMillonEnLetras (@CantidadP Numeric(10,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(8)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),8)
RETURN
(CASE WHEN @Cantidad >= 10000000 and @Cantidad <= 99999999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 10 then
'DIEZ MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 11 then 'ONCE
MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 12 then 'DOCE
MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 13 then
'TRECE MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 14 then
'CATORCE MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 15 then
'QUINCE MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) < 20 then 'DIEZ
Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 2 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 20 then
'VEINTE MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 20 then
'VEINTE Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 3 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 30 then
'TREINTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 30 then
'TREINTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 4 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 40 then
'CUARENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 40 then
'CUARENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 5 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 50 then
'CINCUENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 50 then
'CINCUENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 6 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 60 then
'SESENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 60 then
'SESENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 7 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 70 then
'SETENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 70 then
'SETENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 8 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 80 then
'OCHENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 80 then
'OCHENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
When Left(cast(@Cantidad as varchar),1) = 9 then
Case When cast(Left(cast(@Cantidad as varchar),2) as numeric) = 90 then
'NOVENTA MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),2) as numeric) > 90 then
'NOVENTA Y ' + dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as
varchar),7))
End
END
ELSE
case when len(cast(@Cantidad as varchar)) = 7 then
dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as varchar),7))
when len(cast(@Cantidad as varchar)) = 6 then
dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as varchar),6))
when len(cast(@Cantidad as varchar)) = 5 then
dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as varchar),5))
when len(cast(@Cantidad as varchar)) = 4 then
dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as varchar),4))
when len(cast(@Cantidad as varchar)) = 3 then
dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
when len(cast(@Cantidad as varchar)) = 2 then
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
when len(cast(@Cantidad as varchar)) = 1 then
dbo.UnidadesEnLetras(right(cast(@Cantidad as varchar),1))
END
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION CentenasDeMillonEnLetras (@CantidadP Numeric(11,2))
RETURNS varchar(200)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(9)
SET @Cantidad = LEFT(CAST(@CantidadP AS VARCHAR),9)
RETURN
(CASE WHEN @Cantidad >= 100000000 and @Cantidad <= 999999999 THEN
Case When Left(cast(@Cantidad as varchar),1) = 1 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 100 then
'CIEN MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),6))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 100 then
'CIENTO ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as varchar),8))
End
When Left(cast(@Cantidad as varchar),1) = 2 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 200 then
'DOSCIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 200 then
'DOSCIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 3 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 300 then
'TRESCIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 300 then
'TRESCIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 4 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 400 then
'CUATROCIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 400 then
'CUATROCIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 5 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 500 then
'QUINIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as
varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 500 then
'QUINIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 6 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 600 then
'SEISCIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 600 then
'SEISCIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 7 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 700 then
'SETECIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 700 then
'SETECIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 8 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 800 then
'OCHOCIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 800 then
'OCHOCIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
When Left(cast(@Cantidad as varchar),1) = 9 then
Case When cast(Left(cast(@Cantidad as varchar),3) as numeric) = 900 then
'NOVECIENTOS MILLONES ' + dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad
as varchar),3))
When cast(Left(cast(@Cantidad as varchar),3) as numeric) > 900 then
'NOVECIENTOS ' + dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as
varchar),5))
End
END
ELSE
case when len(cast(@Cantidad as varchar)) = 8 then
dbo.DecenasDeMillonEnLetras(right(cast(@Cantidad as varchar),8))
when len(cast(@Cantidad as varchar)) = 7 then
dbo.UnidadesDeMillonEnLetras(right(cast(@Cantidad as varchar),7))
when len(cast(@Cantidad as varchar)) = 6 then
dbo.CentenasDeMillarEnLetras(right(cast(@Cantidad as varchar),6))
when len(cast(@Cantidad as varchar)) = 5 then
dbo.DecenasDeMillarEnLetras(right(cast(@Cantidad as varchar),5))
when len(cast(@Cantidad as varchar)) = 4 then
dbo.UnidadesDeMillarEnLetras(right(cast(@Cantidad as varchar),4))
when len(cast(@Cantidad as varchar)) = 3 then
dbo.CentenasEnLetras(right(cast(@Cantidad as varchar),3))
when len(cast(@Cantidad as varchar)) = 2 then
dbo.DecenasEnLetras(right(cast(@Cantidad as varchar),2))
when len(cast(@Cantidad as varchar)) = 1 then
dbo.UnidadesEnLetras(right(cast(@Cantidad as varchar),1))
END
END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION CantidadEnLetras (@CantidadP Decimal(19,2))
RETURNS varchar(500)
WITH SCHEMABINDING AS
BEGIN
DECLARE @Cantidad as numeric(17)
SET @Cantidad = LEFT(@CantidadP,charindex('.',@CantidadP)-1)
RETURN
( REPLACE
( '(' + dbo.CentenasDeMillonEnLetras(@Cantidad) + ' PESOS ' +
right(cast(@CantidadP as varchar),2) +
'/100 M.N.)'
,' ', ' '
)
)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


"Rubén Garrigós" wrote:

Mauricio, sin más datos sobre las funciones difícilmente podremos ayudarte.
Imagino que el código de cada una de las dependientes será similar entre si.
¿Podrías adjuntar la función CantidadEnLetras y un par de las otras (por
ejemplo
UnidadesEnLetras y CentenasDeMillarEnLetras?

El hecho que sí te funcione a veces da que pensar que el problema pueda
venir por bloqueos o algún otro problema puntual.

Rubén Garrigós
Solid Quality Mentos

"Mauricio A." wrote:

> Buenas tardes a todos.
>
> Tengo un problema con SQL 2005 en una funcion que traduce los numeros a
> letras. Esta funcion la tenia trabajando perfectamente en SQL 2000 y no se
> porque razón aqui la no funciona.
>
> Esta funcion se compone de 10 funciones que van traduciendo unidades,
> decenas y centenas hasta los millones, ejemplo:
>
> select dbo.CantidadEnLetras(1973454)
>
> Pero al ejecutarla no termina y se queda como si estuviera trabajando, pero
> si ejecuto primero algunas de las iniciales por ejemplo:
>
> select dbo.CentenasEnLetras(454)
> select dbo.CentenasDeMillarEnLetras(973454)
> select dbo.CantidadEnLetras(761973454)
>
> Asi ya funciona, pero esto despues de un rato sigue sin funcionar otra vez.
>
> No agrego el script de mis funciones porque excede el texto permitido, pero
> son 10 funciones dependientes entre si:
>
> CentenasDeMillonEnLetras
> DecenasDeMillonEnLetras
> UnidadesDeMillonEnLetras
> CentenasDeMillarEnLetras
> DecenasDeMillarEnLetras
> UnidadesDeMillarEnLetras
> CentenasEnLetras
> DecenasEnLetras
> UnidadesEnLetras
> CantidadEnLetras
>
> La ultima es la principal (CantidadEnLetras).
>
> Si alguien desea les mandaré su script a su correo personal ya que no pude
> adjuntarlo aqui.
>
> Si alguien sabe a que se debe les agradeceria mucho sus tips.
>
> Saludos...
>
>
>
>
Respuesta Responder a este mensaje
#5 Mauricio A.
19/09/2008 - 02:24 | Informe spam
Perdón ahí se me fue uno repetido, es el que me contesto a mi mismo.

Es que no aparecía al principio y crei que no se había adjuntado bien.

Gracias...

"Rubén Garrigós" wrote:

Mauricio, sin más datos sobre las funciones difícilmente podremos ayudarte.
Imagino que el código de cada una de las dependientes será similar entre si.
¿Podrías adjuntar la función CantidadEnLetras y un par de las otras (por
ejemplo
UnidadesEnLetras y CentenasDeMillarEnLetras?

El hecho que sí te funcione a veces da que pensar que el problema pueda
venir por bloqueos o algún otro problema puntual.

Rubén Garrigós
Solid Quality Mentos

"Mauricio A." wrote:

> Buenas tardes a todos.
>
> Tengo un problema con SQL 2005 en una funcion que traduce los numeros a
> letras. Esta funcion la tenia trabajando perfectamente en SQL 2000 y no se
> porque razón aqui la no funciona.
>
> Esta funcion se compone de 10 funciones que van traduciendo unidades,
> decenas y centenas hasta los millones, ejemplo:
>
> select dbo.CantidadEnLetras(1973454)
>
> Pero al ejecutarla no termina y se queda como si estuviera trabajando, pero
> si ejecuto primero algunas de las iniciales por ejemplo:
>
> select dbo.CentenasEnLetras(454)
> select dbo.CentenasDeMillarEnLetras(973454)
> select dbo.CantidadEnLetras(761973454)
>
> Asi ya funciona, pero esto despues de un rato sigue sin funcionar otra vez.
>
> No agrego el script de mis funciones porque excede el texto permitido, pero
> son 10 funciones dependientes entre si:
>
> CentenasDeMillonEnLetras
> DecenasDeMillonEnLetras
> UnidadesDeMillonEnLetras
> CentenasDeMillarEnLetras
> DecenasDeMillarEnLetras
> UnidadesDeMillarEnLetras
> CentenasEnLetras
> DecenasEnLetras
> UnidadesEnLetras
> CantidadEnLetras
>
> La ultima es la principal (CantidadEnLetras).
>
> Si alguien desea les mandaré su script a su correo personal ya que no pude
> adjuntarlo aqui.
>
> Si alguien sabe a que se debe les agradeceria mucho sus tips.
>
> Saludos...
>
>
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida