firmalara otomatik bir cari kodu vermek

Katılım
25 Şubat 2006
Mesajlar
56
firmalar için tüm bilgilerini görebileceğim bir data base hazırlamak istiyorum. bunun icin firmalara kendi kodunu verip onun üzerinden sorgulamak istiyorum. örneğin firmanın adı vatan plastik san. a.ş. bundan önceki satırda: vtn_1 kodunu verdirebilirmiyiz. tabi burada şöyle bir sorun da olabilir: başka bir firmanın adı vatan emaye san. ve tic. a.s. olunca da buna özgün bir kod olmalı. bunun icin ne yapmam gerekir?
 
Katılım
8 Temmuz 2004
Mesajlar
254
Excel Vers. ve Dili
office 2007-mssql 2008 R2
Selam,

Bunun için nasıl bir kod sistemi vermesini istediğinize bağlı. Örneğin ilk kelimelerin 1. ve 3. harflerini kod olarak verebilirsiniz. Eğer aynı koddan var ise var ise sıraya bakıp 1 arttırabilirsiniz.

Bunun için MSSQL de trigger kullanabilirsiniz.

Kolay gelsin.
 
Katılım
8 Temmuz 2004
Mesajlar
254
Excel Vers. ve Dili
office 2007-mssql 2008 R2
Selam,

Size bir örnek yapabilirim aslında. Siz bana sütun isimlerini verin. Anlattığım işlemler MSSQL'de geçerli.


Kolay gelsin.
 
Katılım
25 Şubat 2006
Mesajlar
56
ÖRNEK SÜTUNLARIMIZ ( "/" İŞARETİYLE AYRILIYOR)
CARİ KODU/CARİ ÜNVANI/VD/VD NO
HTT2526/HİTİT MOBİLYA/A.KURUMLAR/256 256 2526

GİBİ..
 
Katılım
8 Temmuz 2004
Mesajlar
254
Excel Vers. ve Dili
office 2007-mssql 2008 R2
Kod:
--Trigger oluşturuyoruz
CREATE TRIGGER carikodver 
ON DATABASEISMI--buraya databaseisminizi yazın
--ne için tanımlıyoruz bu trigger'ı? insert için
FOR  insert AS
--cari unvandaki ilk harfleri almak için değişkenleri tanımlıyoruz
DECLARE @ILKHARF VARCHAR(1)
DECLARE @ORTAHARF VARCHAR(1)
DECLARE @SONHARF VARCHAR(1)
--burada ise yine cari ünvandaki boşlukları bulmak için(bulduktan sonra ilk gelen harfi alacaz) değişken tanımlamaya devam
DECLARE @ORTABOSLUK AS INTEGER
DECLARE @SONBOSLUK AS INTEGER
--tablonuzda otomatik artan bir ID sütunu(REC_ID) olduğunu varsaydım. uniqe bir kod oluşturmak için buna ihtiyacımız var.
DECLARE @SONID VARCHAR(5)


--değişkenleri tanımladık. Değişkenlere atamalar yapıyoruz....
SELECT  @SONID=REC_ID, 
@ORTABOSLUK=CHARINDEX(' ', [CARİ UNVANI], 1),
@SONBOSLUK=CHARINDEX(' ', [CARİ UNVANI], @ORTABOSLUK+3 ), @ILKHARF=LEFT([CARİ UNVANI],1),
@ORTAHARF=SUBSTRING([CARİ UNVANI], @ORTABOSLUK+1, 1), 
@SONHARF=SUBSTRING([CARİ UNVANI], @SONBOSLUK+1, 1)
FROM DATABASEISMI

--Bütün atamaları yaptık. Artık insert yapıldığında SQL server'ı tetikleyelim.
 
Begin
--yukarıda bulduğumuz kodları yanyana yazabilmek için başka değişken tanımlayalım
DECLARE @KODVER VARCHAR(20)
--bu değişkene bulduğumuz ilk harfleri atayalım...
SET @KODVER=(@ILKHARF+@ORTAHARF+@SONHARF+@SONID)
--Ve nihayet update komutumuzu çalıştırıp insert yapılan REC_ID'deki Cari kod kısmına bu değişkeni yapıştırıyoruz.
UPDATE DATABASEISMI SET [CARİ KODU]=@KODVER WHERE REC_ID=@SONID
End


Yukarıdaki kodları Query Analyzer'da çalıştırın. Siz her insert yaptığınızda(yeni kayıt girdiğinizde otomatik olarak ilk 3 kelimenin baş harflerini ve record numarasını alarak) eşsiz bir kod üretmiş olacak.

Bu arada bu kadar geç kalmasının nedeni eğer aynı kod varsa sıra numarasını bir arttıracak function yapmaya çalıştım. Onu da aşağıya yazıyorum. Oda çalışıyor ama gelen tüm dataları alıyor. Belki ilgilenen olur. takıldığım yeri söyler diye onu da yazmak istiyorum(1 saatim gitti üzerinde boşa gitmesin hehe... )



Kod:
create function kod_ayir(@kod VARCHAR(50))
returns float as 
BEGIN
  Declare @numara as float (4)
  declare @cari as varchar (50) 

  Select @cari=[CARİ KODU] from DATABASEISMI where left([CARİ KODU], 4)= left(@kod, 4)
  
IF len(@cari)=7 SET @numara=CAST(RIGHT(@cari, 2) AS FLOAT(4))+1

else 

set @numara= CAST(RIGHT(@cari, 1) AS FLOAT(4))+1



  Return @numara

END

Kolay gelsin.
 
Katılım
25 Şubat 2006
Mesajlar
56
güzel bir örnek calisma oldu diye düsünüyorum. daha denemedim ama dener denemez size dönerim. tesekkurler tekrar.
 
Üst