tarafından

Tablo ve Indekslerin Diskte Kapladıkları Yeri Sorgulama (MS SQL Server)



— kaynak: http://stackoverflow.com/questions/15896564/get-table-and-index-storage-size-in-sql-server
SELECT
s.Name AS SchemaName,
t.NAME AS TableName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) – SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables t
INNER JOIN
sys.schemas s ON s.schema_id = t.schema_id
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME NOT LIKE 'dt%' — filter out system tables for diagramming
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
s.Name, t.Name

view raw

gistfile1.txt

hosted with ❤ by GitHub

tarafından

Bir Kelimenin Bir Karakter Dizgisi İçindeki Tekrarlanma Sıklığını Bulma (SQL)


Bir kelime ya da karakterin, bir karakter dizgisi (string) içinde kaç defa geçtiğini bulmak için aşağıdaki SQL kullanılabilir.


/*
Bir Kelimenin Bir Karakter Dizgisi İçindeki Tekrarlanma Sıklığını Bulma
*/
DECLARE @wordToFind varchar(3) = 'Hello'
DECLARE @text varchar(300) = 'Hello World! Hello World! Hello World!'
SELECT (LEN(@text) – LEN(REPLACE(@text, @wordToFind, ''))) / LEN(@wordToFind) AS Tekrar

view raw

gistfile1.txt

hosted with ❤ by GitHub

tarafından

SQL’de ParseName Metodu (Sql Server)


SQL Server 2005 ve sonrası tarafından desteklenen PARSENAME komudu, SQL Server nesne isimlerinin nokta ile ayrılmış kısımlarını programatik anlamda kolay bir şekilde almak için tasarlanmış bu metot.

SQL Server’da nesne ismi aşağıdaki biçimde:

<sunucu ismi>.<veritabanı ismi>.<şema ismi>.<nesne ismi>

PARSENAME(nesne_ismi, kisim_no) şeklinde iki parametre alan bu metotta noktaya göre verilen değer kısımlara ayrılır. Kısım numarası 1 ile 4 arasında olup son kısım 1 ile alınabilir.

Örnek:
SELECT PARSENAME('AnaSunucu.KullaniciDB.dbo.Kullanicilar', 1)

'Kullanicilar'

Her ne kadar bu metot, nesne isimleri için tasarlanmış olsa da nokta (.) ile ayrılmış tüm verileri ayırmak için kullanılabilir. Ama iki kısıt olduğunu unutmamak lazım:
1. Son kısmı 1 ile alırken, ilk kısmı 4 sayısı ile alabilirsiniz.
2. En fazla 3 nokta içeren karakter dizeleri (yani noktalarla dörde ayrılmış) parametre olarak verilebilir. 3 noktadan fazlası varsa metot işe yaramıyor.

Kaynak: https://msdn.microsoft.com/en-us/library/ms188006.aspx

tarafından

C#’ta TryParse Metodu ile Karakter Dizilerini (String) Sayıya Çevirme


Kod yazarken genellikle karşılaşılan durumlardan biri, karakter dizilerinin (String) sayısal değerlere çevrilmesidir.

Web programlama alanından bir örnek ele alalım. http://www.herurunburada1TLsendealpismanolma.com/goster.aspx?id=123 şeklinde bir istek yapıldığı zaman goster.aspx içindeki kodda 123 değerini sayıya çevirmek gerekecektir. Bunun için aşağıdaki gibi bir kod yazabiliriz:

string idStr = Request.QueryString["id"];
int id = Convert.ToInt32(idStr);

Yukarıdaki kod geçerli, derlenebilen bir kod olmakla beraber id değerinin her zaman sayı olabileceğini varsayan bir kod ki oldukça yanlış bir varsayım. id değerinin sayısal bir değer olmayacağını da hesaba katarsak kodu aşağıdaki şekilde değiştirebiliriz:

string idStr = Request.QueryString["id"];
int id = 0;
try {
Convert.ToInt32(idStr);
} catch {
return;
}

Bir çevirme işlemi için 7 satır yazmamız gerekti. Bunu biraz daha sıkıştırsak 4-5 satıra düşürebiliriz. Ama bunu daha güzel ve aynı zamanda daha performanslı bir şekilde yapmanın yöntemi var. O da TryParse metodu:

int id = 0;
if(!int.TryParse(Request.QueryString["id"], out id)) return;

TryParse metoduna iki parametre geçiriliyor. İlki çevirmek istediğimiz değer, ikincisi de eğer çevrim işlemi gerçekleşirse yeni değerin eşitleneceği değişken (bu yüzden out anahtar kelimesini kullanmak gerekli). İşin güzel kısmı, çevrim işlemi başarılı olursa true, başarısız olursa false döndürüyor. Bu kalıp sadece int için değil; double, float, char, bool gibi primitif türler ve DateTime sınıfı için de geçerli. Bu kalıpla .Net kütüphanesi içinde başka yerlerde de karşılabilirsiniz. Genel bir problem için güzel bir çözüm.

Mutlu kodlamalar! :)

Not: Parse işlemleri için http://www.dotnetperls.com/tryparse adresine bir göz atabilirsiniz.

tarafından

Hangi Veritabanı Önbellekte Ne Kadar Yer Tutuyor? (MS SQL Server)


Aşağıdaki SQL kodu ile MS SQL Server üzerinde bulunan tüm veritabanlarının önbellekte ne kadar yer tuttuğunu öğrenebilirsiniz.


/*
MS SQL Server'da hangi veritabanının ne kadar yer tuttuğunu gösteren aşağıdaki SQL'in çalışma süresi,
veritabanı büyüklüğüyle doğru orantılıdır. Birkaç dakika sürebilir.
*/
SELECT CAST(COUNT(1) * 8 / 1024.0 AS NUMERIC(10, 2)) AS CachedDataMB,
CASE database_id WHEN 32767 THEN '* Resource DB' ELSE DB_NAME(database_id) END AS DatabaseName, database_id DatabaseID
FROM sys.dm_os_buffer_descriptors
GROUP BY DB_NAME(database_id) , database_id ORDER BY DB_NAME(database_id)

Önbellek kullanımı sayesinde, veritabanı nesneleri ve sorguların yürütme planları (execution plan) sunucu hafızasında tutulur. Bu sayede hafızadan okumaya nazaran çok daha yavaş bir işlem olan diskten okuma işlemi yerine hafızadan okuma işlemi yapılarak performans artışı sağlanır.

Bir veritabanının ne kadar yer tuttuğunu ise aşağıdaki komut ile öğrenmek mümkün:

sp_spaceused

Veritabanının diskte tuttuğu yer ile önbellekte kullandığı yeri, yukarıda belirttiğimiz sql sorgusu ve sp_spaceused prosedürünü kullanarak karşılaştırabilirsiniz.

tarafından

SQL ile Otomatik Artan Birincil Anahtar (Auto-Increment Primary Key) Nasıl Eklenir? (MS Sql Server)


Yeni Tablo Oluştururken
Saf sql kodu ile SQL Server’da tablo oluştururken artan birincil anahtar (auto increment primary key) eklemek gerekirse aşağıdaki örnek sql kodu size yardımcı olabilir:

CREATE TABLE KULLANICILAR (kullaniciID int NOT NULL IDENTITY (1,1) PRIMARY KEY, kullaniciAdi nvarchar(100))

IDENTITY (1,1) ile KULLANICILAR tablosuna girilen kayıtların kullaniciID değerleri 1 ile başlayıp 1’er 1’er artması sağlanır. IDENTITY(1000,1) yazmış olsaydık, ilk girilen kayıtta kullanciID 1000 olurdu.

Mevcut Tabloya Nasıl Eklenir?
Bir de mevcut bir tabloya, tek satırda nasıl eklenir, onu görelim:

ALTER TABLE KULLANICILAR ADD kullaniciID int NOT NULL IDENTITY (1,1) PRIMARY KEY

Bir diğer yolu da CONSTRAINT tanımı ile yapılabilmesi:

ALTER TABLE KULLANICILAR
ADD kullaniciID int NOT NULL IDENTITY (1,1),
ADD CONSTRAINT PK_KULLANICILAR PRIMARY KEY CLUSTERED (kullaniciID)

ALTER TABLE ile ilgili olarak MSDN makalesine de göz atabilirsiniz.

tarafından

Metin Dosyalarını Tek Bir Dosyada Birleştirmek (MS-DOS)


Aynı dizinde bulunan metin dosyalarını tek bir metin dosyası olarak birleştirmek için MS-DOS’ta aşağıdaki komut kullanılabilir.

copy *.txt tekdosya.txt

*.txt, tüm txt uzantılı dosyalar anlamına gelmektedir.

copy komudunun çalıştırıldığı dizinden farklı olarak başka bir dizinde (örneğin d:\dosyalar) işlem yapmak istenirse aşağıdaki kod kullanılabilir:

copy d:\dosyalar\*.txt d:\dosyalar\tekdosya.txt

tarafından

T-SQL ile Virgüllü Liste Ayrıştırma ve Oluşturma (SQL)



— T-SQL ile Virgüllü Liste Ayrıştırma ve Oluşturma —
— Örneklerde kullanmak üzere id alanında oluşan bir @idTable oluşturulur.
declare @idTable TABLE (id int)
insert @idTable (id) values (1)
insert @idTable (id) values (2)
/*
1. Virgüllü Listeye Çevirme
Users tablosundaki ilk 10 UserId değerini virgüllü liste haline getirme
*/
select STUFF((select top 10 ',' + cast(id as varchar(20)) from @idTable FOR XML PATH ('')) , 1, 1, '')
/*
2. Virgüllü Listeden Sayı Tablosuna Çevirme
Virgüllü liste olarak gelen sayilari @idTable tablosuna girme
*/
declare @xml xml
declare @ids varchar(1000) = '3,4,5,6'
SELECT @xml = CONVERT(xml,'<root><s>' + REPLACE(@ids,',','</s><s>') + '</s></root>')
insert into @idTable (id) SELECT [Value] = T.c.value('.','varchar(20)') FROM @xml.nodes('/root/s') T(c);
select id from @idTable

view raw

gistfile1.sql

hosted with ❤ by GitHub

tarafından

Basit Bir Dizin Kopyalama Metodu (C#)


Bir dizini başka bir dizine taşımak için kullanılabilecek C# kodu.


/// <summary>
/// Copies one directory to another directory. This works for network share whereas Directory.Move does not…
/// </summary>
/// <param name="sourceDir">source directory</param>
/// <param name="destinationDir">destination directory</param>
/// <param name="deleteSourceDirectory">set to true to delete the source directory</param>
private static void copyDirectory(string sourceDir, string destinationDir, bool deleteSourceDirectory = false)
{
String[] entries;
if (!System.IO.Directory.Exists(sourceDir)) return;
if (!System.IO.Directory.Exists(destinationDir)) System.IO.Directory.CreateDirectory(destinationDir);
// copy sub files
entries = System.IO.Directory.GetFiles(sourceDir);
foreach (string file in entries)
{
System.IO.File.Copy(file, System.IO.Path.Combine(destinationDir, System.IO.Path.GetFileName(file)), true);
}
// copy sub directories
entries = System.IO.Directory.GetDirectories(sourceDir);
foreach (string subDir in entries)
{
copyDirectory(subDir, System.IO.Path.Combine(destinationDir, System.IO.Path.GetFileName(subDir)), deleteSourceDirectory);
}
if (deleteSourceDirectory) System.IO.Directory.Delete(sourceDir, true);
}

view raw

gistfile1.cs

hosted with ❤ by GitHub

tarafından

Tek Bir Alandaki Adları, Ad Soyad Olarak Ayırmak (SQL)


Ad ve soyad verilerinin tek bir tablo alanında olması ve bunları ayırma ihtiyacı olursa aşağıdaki SQL kullanılabilir:


-- Adları, Ad Soyad olarak ayırma
select left(FirstName, len(FirstName)-charindex(' ',reverse(FirstName))) as FirstName, right(FirstName, charindex(' ',reverse(FirstName))-1) as LastName from Users
-- Ad alanındaki ad/soyad verisiyle, ad ve soyad alanlarını güncelleme
update Users set FirstName = left(FirstName, len(FirstName)-charindex(' ',reverse(FirstName))), LastName = right(FirstName, charindex(' ',reverse(FirstName))-1)

view raw

gistfile1.sql

hosted with ❤ by GitHub