En iyi yanıtlayıcılar
Belirli kayıt tutma

Soru
-
Veritabanında bir tablom olacak KullanıcıId | İşlemi vs. gibi ben bu tabloya her kullanıcının yaptığı 10 işlemi kaydetmek istiyorum. 10 işlem kaydı yapıldıktan sonrada bu 10 işlemi sondan başa tekrar güncellemek istiyorum. Bu konuyla ilgili bilgilerinizi paylaşırsanız sevinirim. Teşekkürler.
Yanıtlar
-
Merhaba;
Kodlar aşağıda. Sanırım bunun gibi birşey
--KULLANICI TABLOSU OLUŞTURUR CREATE TABLE [dbo].[Kullanicilar]( [KullaniciId] [int] IDENTITY(1,1) NOT NULL, [Ad] [nvarchar](50) NULL, [Soyad] [nvarchar](50) NULL, CONSTRAINT [PK_Kullanicilar] PRIMARY KEY CLUSTERED ( [KullaniciId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO --ISLEM TABLOSU OLUŞTURUR CREATE TABLE Islemler ( [IslemId] [int] IDENTITY(1,1) NOT NULL, [KullaniciId] [int] NULL, [IslemAdi] [nvarchar](50) NULL, [Aciklama] [nvarchar](500) NULL, [SonGuncellenmeTarihi] [datetime] NULL, CONSTRAINT [PK_Islemler] PRIMARY KEY CLUSTERED ( [IslemId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[Islemler] ADD CONSTRAINT [DF_Islemler_SonGuncellemeTarihi] DEFAULT (getdate()) FOR [SonGuncellenmeTarihi] GO --ISLEMİ KAYDEDERKEN EĞER 1 KULLANICIYA AİT 10 DAN FAZLA İŞLEM VARSA --EN ESKİ İŞLEMİN ÜZERİNE YENİ İŞLEMİ YAZAR YOKSA YENİ KAYIT OLARAK EKLER CREATE PROCEDURE IslemKaydet @KullaniciId int, @IslemAdi nvarchar(50), @Aciklama nvarChar(500) AS IF (SELECT COUNT(*) FROM Islemler WHERE KullaniciId=@KullaniciId) < 10 BEGIN INSERT INTO Islemler(KullaniciId,IslemAdi,Aciklama) VALUES(@KullaniciId,@IslemAdi,@Aciklama) END ELSE BEGIN UPDATE Islemler SET IslemAdi=@IslemAdi, Aciklama=@Aciklama, SonGuncellenmeTarihi=GETDATE() WHERE IslemId=(SELECT TOP 1 IslemId FROM Islemler WHERE KullaniciId=@KullaniciId ORDER BY SonGuncellenmeTarihi ASC) END --YUKARDAKİLERİ ÇALIŞTIRDIKTAN SONRA AŞAĞIDAKİ SORGUYU ÇALIŞTIRARAK DENEYEBİLİRSİN --EXECUTE IslemKaydet 1, 'Kayıt Ekleme4', 'açiklama s2 - 4' --KAYITLARI ÇEKERKEN AŞAĞIDAKİ GİBİ ÇEKERSEN SONDAN İLKE DOĞRU OLUR --SELECT * FROM Islemler ORDER BY SonGuncellenmeTarihi DESC
NOT: Procedure kullanarak yaptım.
Tablolara başka detaylarda ekleyebilirsiniz. Ben en sade şekli ile yaptım.
Anlamadığınız bir yer varsa lütfen sorunuz.
Kolay gelsin.
Yunus Emre ALTINAY
Yunus Emre ALTINAY
- Yanıt Olarak İşaretleyen Arshenick 11 Nisan 2014 Cuma 11:58
Tüm Yanıtlar
-
-
Merhaba;
Kodlar aşağıda. Sanırım bunun gibi birşey
--KULLANICI TABLOSU OLUŞTURUR CREATE TABLE [dbo].[Kullanicilar]( [KullaniciId] [int] IDENTITY(1,1) NOT NULL, [Ad] [nvarchar](50) NULL, [Soyad] [nvarchar](50) NULL, CONSTRAINT [PK_Kullanicilar] PRIMARY KEY CLUSTERED ( [KullaniciId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO --ISLEM TABLOSU OLUŞTURUR CREATE TABLE Islemler ( [IslemId] [int] IDENTITY(1,1) NOT NULL, [KullaniciId] [int] NULL, [IslemAdi] [nvarchar](50) NULL, [Aciklama] [nvarchar](500) NULL, [SonGuncellenmeTarihi] [datetime] NULL, CONSTRAINT [PK_Islemler] PRIMARY KEY CLUSTERED ( [IslemId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[Islemler] ADD CONSTRAINT [DF_Islemler_SonGuncellemeTarihi] DEFAULT (getdate()) FOR [SonGuncellenmeTarihi] GO --ISLEMİ KAYDEDERKEN EĞER 1 KULLANICIYA AİT 10 DAN FAZLA İŞLEM VARSA --EN ESKİ İŞLEMİN ÜZERİNE YENİ İŞLEMİ YAZAR YOKSA YENİ KAYIT OLARAK EKLER CREATE PROCEDURE IslemKaydet @KullaniciId int, @IslemAdi nvarchar(50), @Aciklama nvarChar(500) AS IF (SELECT COUNT(*) FROM Islemler WHERE KullaniciId=@KullaniciId) < 10 BEGIN INSERT INTO Islemler(KullaniciId,IslemAdi,Aciklama) VALUES(@KullaniciId,@IslemAdi,@Aciklama) END ELSE BEGIN UPDATE Islemler SET IslemAdi=@IslemAdi, Aciklama=@Aciklama, SonGuncellenmeTarihi=GETDATE() WHERE IslemId=(SELECT TOP 1 IslemId FROM Islemler WHERE KullaniciId=@KullaniciId ORDER BY SonGuncellenmeTarihi ASC) END --YUKARDAKİLERİ ÇALIŞTIRDIKTAN SONRA AŞAĞIDAKİ SORGUYU ÇALIŞTIRARAK DENEYEBİLİRSİN --EXECUTE IslemKaydet 1, 'Kayıt Ekleme4', 'açiklama s2 - 4' --KAYITLARI ÇEKERKEN AŞAĞIDAKİ GİBİ ÇEKERSEN SONDAN İLKE DOĞRU OLUR --SELECT * FROM Islemler ORDER BY SonGuncellenmeTarihi DESC
NOT: Procedure kullanarak yaptım.
Tablolara başka detaylarda ekleyebilirsiniz. Ben en sade şekli ile yaptım.
Anlamadığınız bir yer varsa lütfen sorunuz.
Kolay gelsin.
Yunus Emre ALTINAY
Yunus Emre ALTINAY
- Yanıt Olarak İşaretleyen Arshenick 11 Nisan 2014 Cuma 11:58
-