1 : Bağlı olunan sunucuda yüklü bulunan veritabanlarına ait bazı temel bilgilerin elde edilmesi
select database_id [Id] ,name [Database Name] ,create_date [Create Date] ,Case [compatibility_level] when '60' then 'SQL Server 6.0' when '65' then 'SQL Server 6.5' when '70' then 'SQL Server 7.0' when '80' then 'SQL Server 2000' when '90' then 'SQL Server 2005' when '100' then 'SQL Server 2008' else 'unknown' end as [Compatibility Level] ,collation_name [Collation] ,Case is_fulltext_enabled when 1 then 'Enabled' else 'Disabled' end as [FullText] ,user_access_desc [User Access] ,state_desc [State] ,snapshot_isolation_state_desc [Snapshot Isolation] ,Case is_read_only when 1 then 'Yes' else 'No' end as [Read Only] ,Case is_broker_enabled when 1 then 'Yes' else 'No' end as [Service Broker] from sys.databases order by [Database Name]
2 : Sistemde kullanıcı tanımlı ne kadar tablo,stored procedure, function, view , trigger varsa, şema adları ile birlikte elde edilmeleri
select
S.name+'.'+O.name [Object]
,object_id [Id]
,type
,type_desc
,create_date [Create Date]
,modify_date [Modify Date]
from sys.all_objects O
join sys.schemas S on O.schema_id=S.schema_id
where type in ('U','V','TR','FN','P')
order by [Object]
3: Sistemde yer alan tablolarda kullanılan toplam Field sayılarının tespit edilmesi
select
T.Name
,Count(C.column_id) [Total Column Count]
from sys.tables T
join sys.columns C on T.object_id=C.object_id
where T.type='U'
group by T.Name
order by Count(C.Column_id) desc
4 : İçeriğinde örneğin @@IDENTITY komutunu içeren Stored Procedure' lerin bulunması
Use Rapor
Go
select
SPECIFIC_CATALOG
,SPECIFIC_SCHEMA+'.'+SPECIFIC_NAME [SP NAME]
,ROUTINE_DEFINITION
from INFORMATION_SCHEMA.ROUTINES Routines
where ROUTINE_TYPE='PROCEDURE' and ROUTINE_DEFINITION like '%UPDATE%'
5 : sp_spaceused ile bir tablonun boyutsal olarak kullanım alan bilgilerinin elde edilmesi
Use Rapor
Go
sp_spaceused 'Production.Product'
6 : Tablolar arasında en çok yer tutanların tespit edilmesi
Go
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"
Ama işi daha da ,ileri götürebiliriz. Özellikle yukarıda çalışan sorgunun ekran çıktısı hoşumuza gitmediyse
Use Rapor
Go
declare @TableName nvarchar(100)
create table #TempTable
(
[Table Name] nvarchar(100),
[Row Count] varchar(100),
[Reserved Size] varchar(50),
[Data Size] varchar(50),
[Index Size] varchar(50),
[Unused Size] varchar(50)
)
declare tableCursor cursor forward_only
for
select S.name+'.'+T.[name]
from sys.tables T
join sys.schemas S on T.Schema_id=S.Schema_id
where T.type='U'
for read only
open tableCursor
while (1=1)
begin
fetch next from tableCursor into @TableName
if(@@FETCH_STATUS<>0)
break;
insert #TempTable exec sp_spaceused @TableName
end
close tableCursor
deallocate tableCursor
select * from #TempTable Order by [Table Name] drop table #TempTable
7 : Sistemdeki kullanıcı tanımlı tablo adlarını tek bir hücre içerisinde aralarında virgül koyarak elde etmek
DECLARE @Names VARCHAR(8000)
SELECT @Names = COALESCE(COALESCE(@Names + ',', '') + Name, @Names)
FROM sys.tables
where type='U'
select @Names
8 : Sistem yer alan veritabanlarından hangilerinin en son ne zaman yenilendiğinin ve hangilerinin hiç yedeklenmediğinin öğrenilmesi
SELECT
D.name [Database Name]
,case when MAX(b.backup_finish_date) is NULL
then 'Bakcup Yok'
else Convert(varchar(100), MAX(b.backup_finish_date))
end AS [Last Backup Time]
FROM sys.databases D
LEFT JOIN msdb.dbo.backupset B ON D.name = B.database_name AND B.type = 'D'
WHERE D.database_id NOT IN (2)
GROUP BY D.name
ORDER BY [Database Name] DESC
9 : Bir tablodan rastgele alanlar çekmek. Örneğin günün hediye dağıtılacak şanslı üyelerinin bulunmasında kullanabilir.
Select
Top 5 NewId() id,kod
from bilgi
order by 1
Select
Top 5 NewId() id,kod
from bilgi
order by 1
Select
Top 5 NewId() id,kod
from bilgi
order by 1
Select
Top 5 NewId() id,kod
from bilgi
order by 1
10 : Kullanıcı tanımlı tablolarda Clustered Index kullanılmayanların öğrenilmesi.
select
S.name+'.'+T.name AS [TableName]
from sys.tables T
inner join sys.schemas S
on S.schema_id = T.schema_id
where OBJECTPROPERTY(OBJECT_ID,'TableHasClustIndex') =0 and T.Type='U'
order by[TableName] ASC
11 : Çevresel sunucu bilgilerinin elde edilmesi.
Select
server_id Id
,name [Server Name]
,product [Product Type]
,provider [Provider Name]
,data_source [Data Source]
,catalog
,case is_data_access_enabled
when 1 then 'Enabled'
else 'Disabled'
end as [Data Access]
from sys.servers
12 : Ürünleri alt kategori adları ile birlikte listeyelim
Select
u.id,u.adi,k.kategori
from urunler u
join kategori k
on u.kat_id=k.id
order by k.kategori,u.adi
13 : Sistem Sorguları
select * from sys.tables -- sql instance üzerindeki tüm tablolar ve bunlara ait bilgiler
select * from sys.databases -- sql instance üzerindeki tüm veritabanları ve bunlara ait bilgiler
select * from sys.columns -- sistemdeki tablolarda yer alan tüm kolonlar ve bunlara ait bilgiler
select * from sys.objects -- tablo, stored procedure, function gibi ne kadar nesne varsa sistemde onlara ait bilgiler
14 : Kolon adında Name geçen alanları içeren tabloları bulalım
Select
T.name [Table Name]
,C.name [Category Name]
from sys.tables T
join sys.columns C
on T.object_id=C.object_id
where C.name like '%Name%'
order by T.name,C.name
15 : Hangi tabloda kaç adet kolon vardır?
Select
T.name
,COUNT(c.name) [Total Column Count]
From sys.tables T
join sys.columns C
on T.object_id=C.object_id
group by T.name
order by COUNT(c.name) desc
16 : Her bir tablonun identity alanlarını tablo adı bilgisi ile yazdıralım
select
T.name [Table Name]
,C.name [Column Name]
from sys.columns C
join sys.tables T
on T.object_id=C.object_id
where C.is_identity=1
order by 1,2
EXEC sp_configure 'show advanced options',1
reconfigure
EXEC sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
go
EXEC sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
EXEC sp_configure 'show advanced options',0
reconfigure
go
Öncelikle SQL üzerinden acesse erişebilmemiz için yukardaki gibi bi ayar yapmamız lazım bu ayar başarılı olduktan sonra artık aşağıdaki gibi sql erişebiliriz...
aynı şekilde insert, update ve delete sorgularında çalıştırabilir.
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'D:\YAZILIM\OFİCE\Acces\Kutuphane.mdb'; 'admin';'','select * from yazar') (alanlar) values (değerler)
delete from OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'D:\YAZILIM\OFİCE\Acces\Kutuphane.mdb'; 'admin';'','select * from yazar') where şart
update OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'D:\YAZILIM\OFİCE\Acces\Kutuphane.mdb'; 'admin';'','select * from yazar') set bilgiler where şart
Şimdide okul yıllarında kendime aldığım notları sizle paylaşmak istiyorum. Kendim için faydalı bulduğum ve unutmamak için kullanım şeklini not aldığım bilgiler. bunlara örnek göstermicem ama zaten basit terimler oldukları için siz anlicaksınız..
SQL NOTLARI
1)
Kod ile belirtilen yolda dosya olusturma
CREATE database kullanici1
on primary(name='kullanici1',
filename='D:\kullanici1.mdf',
size=50 MB,
maxsize = 1GB,
filegrowth=20%)
log on(name='kullanici2',
filename='D:\kullanici1_log.ldf',
size=50 MB,
maxsize = 1GB,
filegrowth=20%)
2) Type olusturma…
use servis
create type tckimlik from char(11) not null
select * from sys.types // Tüm Veri Tiplerini Listeleme
3) Geçici Tablo Oluşturma…
create table
#deneme(tc_no varchar(11) primary key,ad varchar(21),sad varchar(21))
create table
tempdb.. deneme1(tc_no
varchar(11) primary key,ad varchar(21),sad varchar(21))
4) Rastgele Kayıt Getirme
use servis
select top(15) id,tur from bkm order by (id)
select top(15) percent id,tur from bkm order by (id)
5) Tabloda Alan Sınırlama…
create table
deneme(tc_no varchar(11),check(len(tc_no)=11),isim varchar(22),
check(len(isim)>2),email varchar(50),check(charindex('@',email)>0))
6) Benzeersiz Alanları Bulma…
use pravda
select distinct(uye) from siparis
7) Login ve Tabloda Kullanıcı
Olusturma
use cagri
create login lezgin23 with
password='112233'
create user lezgin for login lezgin23
8) Login Ve Tablodaki İzinlerin
Düzenlenmesi…
deny delete on Tablo_Adı to lezgin24
deny insert on Tablo_Adı to lezgin24
revoke all on mert to lezgin24
9) Veri Ekleme, Silme Ve Güncelleme
Insert into iller (il_kod,il_adi) values (83,”Ankara”)
Update iller Set il_adi=”Lezgin” where il_kodu=83
Delete from
iller where il_kodu=83
10) Tablo Ekleme,Silme Ve Güncelleme
Create table
deneme(tc_no varchar(11),isim varchar(22),email varchar(50))
ALTER table isim add
alan_adi veri_tipi à tabloye yeni alan ekleme
ALTER table isim drop column alan_adi à tablodan alan silme
ALTER table isim alter column alan_adi veri_tipi à tablodaki
alani güncelleme
ALTER table
isim add primary
key( alan_adi , alan_adi) à tabloya
birincil anahtar ekleme
DROP table
Tablo_Adi
11) Datepart fonksiyonunukullanma
select *,datepart(y,datih) from kullanici
12) İç içe select fonksiyonu
select * from urun where marka_kodu=(select marka_kodu from
marka where urun_adi='Vestel')
select * from urun where
marka_kodu in (select
marka_kodu from marka where
urun_kod<10)
13) En fazla urunu olan markayı
secmek
select max(grup.adet) from (select marka_kodu,count(*) from urun group by marka_kodu) as grup(marka_kodu,adet)
14) EXISTS ve NOT EXISTS komutları
select u_kodu,u_adi,fiyat from urun where exists(select * from siparis where siparis.urun_kodu=urun.urun_kodu)
select u_kodu,u_adi,fiyat from urun where not exists(select * from siparis where siparis.urun_kodu=urun.urun_kodu)
15) İnner Join fonksiyon kullanımı
select u.u_adi,u.fiyat,m.marka from urun u inner join marka m on
m.marka_kodu=u.marka_kodu
16) Left,Right,Full … Join fonksiyon
kullanımı
select kul_kodu,kul_adi,kul_soyad from
kullanici left join
siparis on kullanici.kul_kodu=siparis.kul_kodu
select kul_kodu,kul_adi,kul_soyad from
kullanici right join
siparis on kullanici.kul_kodu=siparis.kul_kodu
select kul_kodu,kul_adi,kul_soyad from kullanici full alter join siparis on kullanici.kul_kodu=siparis.kul_kodu
17) Having Fonksiyonu Kullanımı
select m.marka_kod,m.marka,avg(u.fiyat) from marka as m inner join urun as u on where u.fiyat>50 group by marka_kod,marka having count(*)>10
18) View Olusturma Ve özellikleri
create view
vw_adi
as
select * from urunler
with check option à
Tabloya kayıt girilemesin
with
shemobinding à Tablo üzerinde değişiklik yapılamaz
with
encyrption à
Şifreleme
19) View ile 2 farklı tabloyu
birleştirmek
create view
vw_adi
as
select * from urunler
union all
select * from urunler
20) Değişken Tanımlama
declare @a int,b varchar
set @a=2
set @b='Lezgin'
print @a
21) Case,if ve while Mantığı
Case Yapısı
|
While Yapısı
|
İf Yapısı
|
select marka_kod,yildiz=
case
when count(urun_kod)>9 then '***'
when count(urun_kod)>4 then '**'
when count(urun_kod)>0 then '*'
end,
count(*) as Adet from urun Group By marka_kod
|
declare @a int
set @a=5
while(@a>0)
begin
set @a=@a-1
print @a
end
|
declare @a int
set @a=5
if(@a>=5)
print 'Sayi Büyük'
else
print 'Sayi Küçük'
|
22) Restore Database
RESTORE DATABASE
servis FROM DISK
= N'D:\xDB\pus_db\servis.bak'
WITH FILE = 1, MOVE N'servis' TO N'D:\servis.mdf', MOVE N'servis_log' TO N'D:\servis_log.LDF',
NOUNLOAD, STATS =
10
23) Sql connection mdf c# ile
SqlConnection baglanti=new
SqlConnection(@"DataSource=.\SQLEXPRESS;
AttachDbFilename =C:\MyWorkers.mdf;Integrated Security=True;Connect
Timeout=30;User Instance=True");
25) Sql Attach mdf.
CREATE DATABASE bastek ON ( FILENAME = N'D:\xDB\BASTEK.mdf'
), ( FILENAME = N'D:\xDB\BASTEK_log.ldf' )
FOR ATTACH; ALTER DATABASE bastek
SET READ_WRITE;
Bu uzun ve yorucu makalemin faydalı olacağına inanıyorum ki buna inanmasam bu kadar uzun tutmazdım makalemi :). Elimden geldiği kadar önemli alanlara değinmeye çalıştım. umarım faydalı bir makale olmuştur sizin içinde bir sonraki makalemde görüşmek dileği ile :)
Hiç yorum yok:
Yorum Gönder