funcion generación de códigos

18/11/2003 - 11:02 por Susana | Informe spam
hola,

necesito montarme una función que me genere un id con un prefijo, es decir,
me explicaré mejor:

dame_id("C") > "CL00087"
dame_id("P") > "PR00029"
dame_id("A") > "AL00003"

Es decir, quiero una función standard qeu me sirva para numerar Clientes,
Proveedores, Albaranes, etc...
Podría tener una tabla de ids y luego una función qeu la consulte y me
genere el id.

pero teneis alguna sugerencia para montarlo de otra forma?

gracias

Preguntas similare

Leer las respuestas

#1 Accotto Maximiliano D.
18/11/2003 - 13:54 | Informe spam
Susana permitime discutir contigo!! pero yo en este caso tengo una funcion
pero en la aplicacion no en el SQL donde tambien tengo tablas de Prefijos y
sufijos por ej para las ordenes de Compra:

OCxxxxxx POR EJ

Pero te repito lo hago desde la aplicacion sin funciones de SQL (esto es
porque asi no solo me funciona con SQL sino por ej con Access :-) )

Un saludo

Accotto Maximiliano Damian
" Susana" escribió en el mensaje
news:%
Mostrar la cita
decir,
Mostrar la cita
#2 Development
18/11/2003 - 19:11 | Informe spam
Puedes hacer esto de la sgte manera
Necesitas tener de todas manera un campo int que se incremente
automaticamente, y un campo nvarchar en el cual vas a insertar una
combinacion de tu prefijo mas el numero que genera el campo que se
autoincrementa.
Deberas crear un insert trigger que te haga el update del campo por decir


CREATE TRIGGER ProveedorInsertTrig ON dbo.Proveedores
FOR Insert
AS
update proveedores set providtext= 'P'+rtrim(ltrim(cast(provid as
nvarchar(30)))) from proveedores

siendo tu estrucutura para este ejempl
Provid int autincrement
Providtext nvarchar(30)
ProvName nvarchar(80)
etc!


Tambien lo que puedes hacer y es mas facil es addicionar el prefijo en la
forma/Screen en que lo presentas,
Sera mas rapido y te dara menos dolores de cabeza.

Espero este te de una idea de como puedes lograrlo




" Susana" wrote in message
news:%
Mostrar la cita
decir,
Mostrar la cita
#3 Javier Loria
18/11/2003 - 20:05 | Informe spam
Hols Susana:
Yo soy amigo de las Tablas de Id's y de numero de documentos, pero si no
quieres usarlas tal vez podrias usar algo como esto?:
/* Codigo de Creacion de Tabla */
CREATE TABLE DocumentosFacturacion(
DocID CHAR(7) NOT NULL
PRIMARY KEY
CHECK( (DocID LIKE '[A-Z][A-Z][0-9][0-9][0-9][0-9][0-9]') AND
(LEFT(DocID,2) IN ('CL','PR','AL')))
)

/* Documentos de Prueba */
INSERT DocumentosFacturacion
SELECT 'CL00087' UNION ALL
SELECT 'PR00029' UNION ALL
SELECT 'AL00003'

/* Funcion de ID */
CREATE FUNCTION DemeID
(@Tipo CHAR(2))
RETURNS int
AS
BEGIN
DECLARE @P1 INT
SET @P1=0
SELECT @P1=COALESCE(MAX(CAST(RIGHT(DocID,5) AS INT)),0)+1
FROM DocumentosFacturacion
WHERE LEFT(DocId,2)=@Tipo
RETURN @p1
END
GO
/* Pruebas Funcionales */
SELECT dbo.DemeID('CL')
SELECT dbo.DemeID('PR')
SELECT dbo.DemeID('AL')
SELECT dbo.DemeID('RR')
/* Fin de Codigo */
Por otra parte, sin que signifique que el diseno anterior este mal podrias
considerar cambiar el esquema de la tabla por:
/* Esquema Alternativo */
CREATE TABLE DocumentosFacturacion2(
TipoDoc CHAR(2) NOT NULL
CHECK(TipoDoc IN ('CL','PR','AL')),
NumDoc INT NOT NULL,
DocId AS TipoDoc+RIGHT('00000'+CAST(TipoDoc AS VARCHAR(5)),5),
CONSTRAINT PK_DocumentosFacturacion2
PRIMARY KEY (TipoDoc, NumDoc)
)

Con esto la funcion se hace un poco mas sencilla, pero no lo hago por esto
sino porque es mas facil luego dar mantenimiento al codigo.
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.
Susana escribio:
Mostrar la cita
Ads by Google
Search Busqueda sugerida