En iyi yanıtlayıcılar
Asp.net SQL ile Tabloya Sadece 10 Kayıt Eklemek İstiyorum ?

Soru
-
Yanıtlar
-
FIFO kuralına göre silin. Log gibi bir şey diyorsunuz o zaman bir datetime alanı da olacak demektir. Min (minimum) fonksiyonunu kullanarak en eski tarihli kayıdı silebilirsiniz veya tarihe göre sıralayıp en küçüğü silebilirsiniz. vb. 5 kayıt ekleyecekseniz top 5 diyerek 5 kaydı alıp bunları silebilirsiniz.
http://pgnchess.com
http://dergikapaklari.com- Yanıt Olarak İşaretleyen Mahmut Fdn 28 Nisan 2016 Perşembe 14:00
-
Sql veritabani dediginiz nedir? PostgreSQL mi? MS SQL server mi? NoSQL olsaydi, ornegin MongoDb ile dogrudan bir Capped Collection yapip kapasitesini 10 olarak belirtirdin olur biterdi.
PostgreSQL'de serial ve NextVal() var. Onunla rahatlikla yaparsin. Bu forumda insanlar genelde, her nedense, MS SQL server diyeceklerine SQL diyorlar. Sanirim sen de MS SQL server demek istiyorsun. MS SQL server'da da artik SEQUENCE var ve PostgreSQL'in Serial'ini taklit ediyor, onunla yapabilirsin. Ornegin:
CREATE SEQUENCE CappedCollection START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 10 CYCLE; CREATE TABLE CappedLog (logId INT, logged DATETIME2 null, data VARCHAR(100)); INSERT INTO dbo.CappedLog ( logId ) SELECT TOP 10 ROW_NUMBER() OVER (ORDER BY id) FROM sys.syscolumns;
Seklinde SQL server'da bir Sequence ve CappedLog adinda yukaridaki tabloyu yaratip, icini bastan 10 adet satirla doldurursak, bundan sonra sadece UPDATE komutu ile istenileni yapabiliriz:
void Main() { using (var con = new SqlConnection(@"server=.\SQLExpress2012;Database=test;Trusted_Connection=yes;")) { var sql = @"DECLARE @nextId INT = NEXT VALUE FOR CappedCollection; UPDATE CappedLog SET logged = @tarih, data = @data WHERE logId = @nextId;"; // 123 defa log'a birseyler "insert" edelim var cmd = new SqlCommand( sql, con); cmd.Parameters.AddWithValue("@tarih", DateTime.Now); cmd.Parameters.AddWithValue("@data", ""); con.Open(); for (int i = 1; i <= 123; i++) { cmd.Parameters["@tarih"].Value = DateTime.Now.AddHours(-150).AddHours(i); // Ornek insert zamani cmd.Parameters["@data"].Value = "Log #" + i; cmd.ExecuteNonQuery(); } // tabloyu kontrol edelim var reader = new SqlCommand("select * from CappedLog", con).ExecuteReader(); while (reader.Read()) { Console.WriteLine("{0}, {1}, {2}", (int)reader["logId"], (DateTime)reader["Logged"], (string)reader["Data"]); } con.Close(); } }
Ciktisi:
1, 4/27/2016 11:35:16 AM, Log #121 2, 4/27/2016 12:35:16 PM, Log #122 3, 4/27/2016 1:35:16 PM, Log #123 4, 4/27/2016 4:35:16 AM, Log #114 5, 4/27/2016 5:35:16 AM, Log #115 6, 4/27/2016 6:35:16 AM, Log #116 7, 4/27/2016 7:35:16 AM, Log #117 8, 4/27/2016 8:35:16 AM, Log #118 9, 4/27/2016 9:35:16 AM, Log #119 10, 4/27/2016 10:35:16 AM, Log #120
- Yanıt Olarak İşaretleyen Mahmut Fdn 28 Nisan 2016 Perşembe 14:00
Tüm Yanıtlar
-
FIFO kuralına göre silin. Log gibi bir şey diyorsunuz o zaman bir datetime alanı da olacak demektir. Min (minimum) fonksiyonunu kullanarak en eski tarihli kayıdı silebilirsiniz veya tarihe göre sıralayıp en küçüğü silebilirsiniz. vb. 5 kayıt ekleyecekseniz top 5 diyerek 5 kaydı alıp bunları silebilirsiniz.
http://pgnchess.com
http://dergikapaklari.com- Yanıt Olarak İşaretleyen Mahmut Fdn 28 Nisan 2016 Perşembe 14:00
-
Sql veritabani dediginiz nedir? PostgreSQL mi? MS SQL server mi? NoSQL olsaydi, ornegin MongoDb ile dogrudan bir Capped Collection yapip kapasitesini 10 olarak belirtirdin olur biterdi.
PostgreSQL'de serial ve NextVal() var. Onunla rahatlikla yaparsin. Bu forumda insanlar genelde, her nedense, MS SQL server diyeceklerine SQL diyorlar. Sanirim sen de MS SQL server demek istiyorsun. MS SQL server'da da artik SEQUENCE var ve PostgreSQL'in Serial'ini taklit ediyor, onunla yapabilirsin. Ornegin:
CREATE SEQUENCE CappedCollection START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 10 CYCLE; CREATE TABLE CappedLog (logId INT, logged DATETIME2 null, data VARCHAR(100)); INSERT INTO dbo.CappedLog ( logId ) SELECT TOP 10 ROW_NUMBER() OVER (ORDER BY id) FROM sys.syscolumns;
Seklinde SQL server'da bir Sequence ve CappedLog adinda yukaridaki tabloyu yaratip, icini bastan 10 adet satirla doldurursak, bundan sonra sadece UPDATE komutu ile istenileni yapabiliriz:
void Main() { using (var con = new SqlConnection(@"server=.\SQLExpress2012;Database=test;Trusted_Connection=yes;")) { var sql = @"DECLARE @nextId INT = NEXT VALUE FOR CappedCollection; UPDATE CappedLog SET logged = @tarih, data = @data WHERE logId = @nextId;"; // 123 defa log'a birseyler "insert" edelim var cmd = new SqlCommand( sql, con); cmd.Parameters.AddWithValue("@tarih", DateTime.Now); cmd.Parameters.AddWithValue("@data", ""); con.Open(); for (int i = 1; i <= 123; i++) { cmd.Parameters["@tarih"].Value = DateTime.Now.AddHours(-150).AddHours(i); // Ornek insert zamani cmd.Parameters["@data"].Value = "Log #" + i; cmd.ExecuteNonQuery(); } // tabloyu kontrol edelim var reader = new SqlCommand("select * from CappedLog", con).ExecuteReader(); while (reader.Read()) { Console.WriteLine("{0}, {1}, {2}", (int)reader["logId"], (DateTime)reader["Logged"], (string)reader["Data"]); } con.Close(); } }
Ciktisi:
1, 4/27/2016 11:35:16 AM, Log #121 2, 4/27/2016 12:35:16 PM, Log #122 3, 4/27/2016 1:35:16 PM, Log #123 4, 4/27/2016 4:35:16 AM, Log #114 5, 4/27/2016 5:35:16 AM, Log #115 6, 4/27/2016 6:35:16 AM, Log #116 7, 4/27/2016 7:35:16 AM, Log #117 8, 4/27/2016 8:35:16 AM, Log #118 9, 4/27/2016 9:35:16 AM, Log #119 10, 4/27/2016 10:35:16 AM, Log #120
- Yanıt Olarak İşaretleyen Mahmut Fdn 28 Nisan 2016 Perşembe 14:00
-
-