Forum

SQL Stored Prosedur...
 
Bildirimler
Hepsini Temizle

SQL Stored Prosedur - Insert Into ID Değeri Hakkında

8 Yazılar
3 Üyeler
0 Reactions
891 Görüntüleme
(@ilkerARSLANTURK)
Gönderiler: 18
Eminent Member
Konu başlatıcı
 

Merhaba;

MS SQL Server 2008 R2 Management Studio 10.50.1600 Versiyonunu kullanmaktayım. Bunu söylemek istedim belki versiyonlarda bir problem olabilir diye. Yazdığım çok uzun bir kod var ama kafanız karışmasın diye yukarıya sadece insert kısımlarını yazdım.  

/* ID int ve Kitaplar Varchar(100) Alanlardan oluşur */
INSERT INTO Kitaplar (Kitaplar) VALUES (Cast(@Kitaplar As Varchar))

/* ID int ve Bolumler Varchar(100) Alanlardan oluşur */
INSERT INTO Bolumler(Bolumler) VALUES (@Bolumler)

/* Anlayacağınız üzere KitapID ve BolumID int, Diğerleri Varchar(100) Alanlardan oluşur */
INSERT INTO Ogrenciler (KitapID, BolumID, BarkodNo, Durum, IP) VALUES (@KitapID, @BolumID, @BarkodNo, @Durum, @IP)

3 Tabloyada tek SP ile kayıt yapılmakta. Fakat şöyle birşey var.

 

Örnek : Kitaplar tablosunu  Where kullanarak sorguladım. Recortcount satır verirse o satırın ID (IDENTITY) değerini almak istiyorum. Aynı şey Bölümler tablosu içinde geçerli.

 

Yani Kitaplar ve Bölümler tablolarında kayıt önceden var ise sadece ID lerini aldırmak istiyorum. Yoksa Insert Into ile yeni kayıt yapıp ID lerini aldırmak istiyorum. 

İnternetten bazı sitelere baktım. Microsoftun haber gruplarınıda inceledim fakat ID değerini kısa yoldan aldıracağım bir yapı ile karşılaşamadım. O yüzden sizede sormak istedim. Bu konuda nasıl bir yol izleyebilirim acaba ?

Şimdiden teşekkürler. 

 
Gönderildi : 14/09/2012 04:39

(@orhanakdogan)
Gönderiler: 311
Reputable Member
 

Merhaba,
insert lerine sonuna SELECT SCOPE_IDENTITY() Ekleyerek ID değerini alır ve bir değişkende tutarsınız, bunuda sonraki insertde kullanırsınız...

 
Gönderildi : 14/09/2012 04:52

(@ilkerARSLANTURK)
Gönderiler: 18
Eminent Member
Konu başlatıcı
 

Eğer tek bi bilgisayardan yapsaydım dediğiniz olurdu. Fakat internet ortamında zayertçiler tarafından kullanılacak. O yüzden farklı bir yöntem için uğraşmaktayım.  

Bildiğiniz farklı bir yöntem var ise sevinirim.

 
Gönderildi : 14/09/2012 04:58

(@orhanakdogan)
Gönderiler: 311
Reputable Member
 

Öncesinde selectinde ID olan istediğiniz where i olan sorguyu çalıştırır X değişkenine atarsınız.
kayıt dönmezse x null kalır if le X i kontrol edip insert i yukarıdaki gibi kullanırsınız scope edilen değer yine X değişkenine atanır.


Master kaydın insertinde de X kullanılır.Böylece kayıt varsa var olan ID yoksa oluşturulan ID yazılmış olur.Kolay gelsin..

 
Gönderildi : 14/09/2012 05:08

(@ilkerARSLANTURK)
Gönderiler: 18
Eminent Member
Konu başlatıcı
 

Merhaba;

Ben en iyisi kodumu paylaşayım. Sorum sadece şuydu. Where şartı ile kayıt bulduğumuzda İLK SATIR ID Değerini nasıl alabilirim. Ben @@IDENTITY yazdım fakat doğru olmadığını biliyorum. İstediğim Veritabanından ID Değerini aldırmak o kadar.

 

/* Kitaplar Tablomuzu Create Edelim */

CREATE TABLE Kitaplar

(

ID int IDENTITY (1, 1) NOT NULL ,

Kitaplar VarChar(100)

/* Bolumler Tablomuzu Create Edelim */

CREATE TABLE Bolumler

(

ID int IDENTITY (1, 1) NOT NULL ,

Bolum VarChar(100)

)

/* Ogrenciler Tablomuzu Create Edelim */

CREATE TABLE Ogrenciler

(

ID int IDENTITY (1, 1) NOT NULL ,

KitapID int, 

BolumID int, 

BarkodNo VarChar(100), 

Durum int, 

IP VarChar(100)

)

/* Kontrol ve Kayıt İçin Prosedurumuzu Yazalım */

CREATE PROCEDURE [dbo].[Kitap_Bolum_Barkod_Kaydet]

@Kitaplar varchar(100)=NULL,

@Bolum varchar(250)=NULL,

@BarkodNo Varchar(13), 

@Durum int, 

@PostaKodu int, 

@IP Varchar(100)

AS

/* Önce Kitaplarımızın Kaydını Kontrol Edelim Yoksa Ekleyelim */

SELECT TOP 1 ID FROM Kitaplar WHERE Kitaplar=@Kitaplar Order By ID ASC

DECLARE @KitapID int=NULL;

SELECT @KitapID=@@IDENTITY /* Ben buraya @@IDENTITY yazdım fakat where sartı ile en son ID'yi istemiyorum. Where ile gelen ilk satırın ID Değerini istiyorum.  */

IF (Cast(@KitapID As Varchar) = '' or Cast(@KitapID As Varchar) Is Null)

BEGIN

INSERT INTO Kitaplar (Kitaplar) VALUES (Cast(@Kitaplar As Varchar))

SELECT @KitapID=SCOPE_IDENTITY()

END

/* Önce Bolum Kaydını Kontrol Edelim Yoksa Ekleyelim */

SELECT TOP 1 ID FROM Bolumler WHERE (Bolum=@Bolum) AND (PostaKodu=Cast(@PostaKodu As Varchar)) Order By ID ASC

DECLARE @BolumID int=NULL;

SELECT @BolumID=@@IDENTITY /* Ben buraya @@IDENTITY yazdım fakat where sartı ile en son ID'yi istemiyorum. Where ile gelen ilk satırın ID Değerini istiyorum.  */

IF (Cast(@BolumID As Varchar) = '' or Cast(@BolumID As Varchar) Is Null)

BEGIN

INSERT INTO Bolumler (Bolum) VALUES (Cast(@Bolum As Varchar))

SELECT @BolumID=SCOPE_IDENTITY()

END

/* Ve Barkodları Kaydediyoruz */

INSERT INTO Ogrenciler (KitapID, BolumID, BarkodNo, Durum, IP) VALUES(@KitapID, @BolumID, @BarkodNo, @Durum, @IP)

RETURN

GO

 

 
Gönderildi : 14/09/2012 15:32

(@ilkerARSLANTURK)
Gönderiler: 18
Eminent Member
Konu başlatıcı
 

Ne yazıkki problemim halen devam ediyor. Bu konuda yardımlarınızı esirgememenizi rica edeceğim. Where karşılığı yok ise nasıl değer aldırıcam. IS NoT Null, IS Null gibi kavramlar işe yaramıyor

 
Gönderildi : 14/09/2012 23:23

(@orhanakdogan)
Gönderiler: 311
Reputable Member
 

sorumuz biraz değişti şimdi, doğru anladıysam eğer;


Selectden dönen herhangi bir kolonu almakla Id kolonunu almak arasında bir fark yoktur.
Doğal olarakda İlgili kısımda @@IDENTITY lik bir durum yok..


SELECT TOP 1 ID FROM Kitaplar WHERE Kitaplar=@Kitaplar Order By ID ASC
DECLARE @KitapID int=NULL;


Yerine


DECLARE @KitapID int=NULL;
SELECT TOP 1 @KitapID =ID FROM Kitaplar WHERE Kitaplar=@Kitaplar Order By ID ASC


kullanmayı denermisiniz.


 

 
Gönderildi : 15/09/2012 00:39

(@kadiravci)
Gönderiler: 202
Üye
 

@declare kitapId int = null;

@kitapId = (select id from Kitaplar where ...) 

if(@kitapId is not null and @kitapId is not <>)

begin

  insert ....

end 

 
Gönderildi : 25/09/2012 14:33

Paylaş: