Forum
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.
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...
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.
Ö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..
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
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
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.
@declare kitapId int = null;
@kitapId = (select id from Kitaplar where ...)
if(@kitapId is not null and @kitapId is not <>)
begin
insert ....
end