Otomatik Artan alan oluşturmak

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Otomatik Artan alan oluşturmak

Mesaj gönderen softdestek »

Aşağıdaki örneğin aynısı ms sql veritabanında nasıl oluşturabiliriz.
Aşağıdaki yöntemide denedim ama bende olmadı..
Teşekkürler
http://www.techonthenet.com/sql_server/primary_keys.php

Kod: Tümünü seç

CREATE TABLE table_name
( 
  column1 datatype [ NULL | NOT NULL ],
  column2 datatype [ NULL | NOT NULL ],
  ...
  CONSTRAINT constraint_name PRIMARY KEY (column1, column2, ... column_n)
);

Okunmamış mesajgönderen vkamadan » 27 Mar 2014 04:29

Merhaba ,
Kullandığınız veri tabanı MySQL ise aşadağıki gibi bir index ekleyerek artan alanın gruplu olarak yeniden başlayarak artmasını trigger vb bulaşmadan direk VT ye yıkabilirsiniz.

Kod: Tümünü seç

KOD: TÜMÜNÜ SEÇ
CREATE TABLE `evrakid` (
  `yer` int(10) NOT NULL,
  `evrakno` int(10) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`yer`,`evrakno`)
) ENGINE=MyISAM;
Yukarıdaki Örnekte, "yer" alanının alacağı her yeni değer için "evrakno" alanına tanımlı olan AUTO INCREMENT yeniden saymaya başlıyor.

kolay gelsin..
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: Otomatik Artan alan oluşturmak

Mesaj gönderen softdestek »

Konu çözüldü...
Sequence oluşturdum.Yer bilgisine göre sequnce değerini artırdım..Bunu tabloaya bağlı bir triger ile yaptım..
bu sayede bu işi otomatiğe bağladım..Sequence kavramı firebirdde yıllardır kullandığım kavram ordaki adı generator..
Oracle da sequence kavramını kullanıyordum..MS sql 2012 versiyonunda girmiş..
Fakat olay aynı zaten..
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: Otomatik Artan alan oluşturmak

Mesaj gönderen smokie »

softdestek yazdı:Konu çözüldü...
Sequence oluşturdum.Yer bilgisine göre sequnce değerini artırdım..Bunu tabloaya bağlı bir triger ile yaptım..
bu sayede bu işi otomatiğe bağladım..Sequence kavramı firebirdde yıllardır kullandığım kavram ordaki adı generator..
Oracle da sequence kavramını kullanıyordum..MS sql 2012 versiyonunda girmiş..
Fakat olay aynı zaten..
Merhabalar,

Firebird de 3 ayrı tablodan id alıp, bu id ler ile 3 tabloyu ilişkilendirerek kayıt yapıyordum. Fakat Mssql de bu kadar pratik olmadığı kesin.
Bahsettiğiniz şekilde, tabloya kayıt işlemi yapılmadan 3 ayrı tablodan id alabiliyormuyuz.
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: Otomatik Artan alan oluşturmak

Mesaj gönderen softdestek »

Burda önemli olan triger ve procedure olayına vakıf olmak..Ben ms sql başlayalı fazla olmadı yaklaşık bir hafta oldu...Fakat komutları bildikten sonra bence ms sql de çok kolay...
Birde en önemlisi hız olayı..Bizim fireirdden daha hızlı..
Benim firebirdde yazdığım bir muahsebe programı var ..Yaklaşık 7000 civarında hesap kodunda firebirdde mizan çıkarması 2dk 30saniye gibi ama aynısı ms sql de sadece 14saniye sürüyor.Üstelik ms sql sonucu birde ayrı tabloya yazdığım halde..
Sizin dediğiniz olayda basit bir zorluğu yok...
İstediğiniz kadar tablodan veri çekebilirsiniz..
Veriyi alacağınız değişkeni tanımlıyorsunuz..
Olay o zaten..Sonrada o veriye query ile sonuç atıyoruz ...sonra değişkeni her işlemde kullan..mantığı bu..
Fakat yinede sizin firebird yazdığınız triger veya proceduru incelemek lazım...
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: Otomatik Artan alan oluşturmak

Mesaj gönderen smokie »

Merhabalar,

Aynı şekilde Bende mssql yeni başladım.

Asıl sormak istediğim,

Kayıt işlemi yapmadan 2 veya daha fazla tablodan id numarası (Otomatik artan alan) nasıl alabilirim.
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: Otomatik Artan alan oluşturmak

Mesaj gönderen softdestek »

a)Satid adlı otoinc alanın son değerini alan kodu ekrana yazar

Kod: Tümünü seç

use DENEME
DECLARE @IDEA INTEGER
SET  @IDEA=(SELECT  MAX(Satislar.SatID) FROM Satislar)
PRINT @IDEA
b)BU DA KAREKTER CİNSİNDEN DEĞER ALMAK İÇİN

Kod: Tümünü seç

use DENEME
DECLARE @URUN VARCHAR(30)
SET  @URUN=(SELECT  Satislar.URUN FROM Satislar WHERE Satislar.SatID=5)
PRINT @URUN
yukardaki kodla satid=5 in değeri olan elman yı ekrana yazar

Şu şekilde bir kodla istediğin tablonun istediğin alanından veri çekebilrsin..
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: Otomatik Artan alan oluşturmak

Mesaj gönderen smokie »

Ben insert işlemi öncesi id almam gerekiyor.

3 ayrı tabloya ilişkili kayıt yapacağımızı düşünürsek.

3 tablonunda id leri bir birlerinde yer almalı. ben firebirde önce 3 tablodan id alıyor, ardından insert işlemini ilişkilendirerek yapıyordum.

Ama incelediğim kadarıyla mssql de böyle bişey olmuyor.
mssql de 3 tabloya boş kayıt açıp sonra update ile düzenleme olabilir. bu yöntemle iki iş oluyor.
veya @@identity komutu ile son kayıt numarasına ulaşılıp yapılabilir.bana pek sağlıklı gibi gelmiyor. 10 artı kullanıcı olduğunu düşünürsek sorun çıkarma ihtimali yüksek.

Zaman ayırıp yazdığın için teşekkürler..
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Otomatik Artan alan oluşturmak

Mesaj gönderen unicorn64 »

yanlış hatırlamıyorsam mssql'de de geçerli olmak üzere, örneğin PK alanının adı ID ise

Kod: Tümünü seç

insert into tablo(alanlar) values(degerler) RETURNING ID 
şeklindeki bir sql ile eklenen kaydın ID değeri alınabilir,

ve aynı transaction altındaki query ler ile

Kod: Tümünü seç

insert into detay_tablo_1(master_id,diger_alanlar) values(:master_id,diger_degerler)

Kod: Tümünü seç

insert into detay_tablo_2(master_id,diger_alanlar) values(:master_id,diger_degerler)
şeklinde detay tablolara kayıt işlemi yapıldıktan sonra transaction commit edildiğinde kayıtlar sorunsuz bir şekilde yapılmış olur
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Cevapla