Recent comments

None


İçerik Ara











Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2013
Takvim
<<  Aralık 2017  >>
PaSaÇaPeCuCuPa
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
Keywords

Bildiğiniz gibi “Alter Database” komutu, veritabanının recovery model, collation gibi veritabanı özelliklerini değiştirmek için kullanılır. SQL Server 2012 sürümünden önce veritabanı adının verilerek yapılması gereken bu işlemin örnek kodu aşağıdaki gibiydi;

alter database deneme set recovery simple

SQL Server 2012 ile beraber artık veritabanı adını belirtmemize gerek kalmıyor. “Current” keyword’ü ile o anda aktif olan veritabanı üzerinde Alter Database komutunu çalıştırabiliyoruz.

Örneğin aşağıdaki komut “deneme” veritabanının recovery model’ini simple yapmak için kullanılabilir.

use deneme
go

alter database current set recovery simple
Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SQL Server’da bir tabloya kolon eklendiğinde, bu tabloya “Select *” şeklinde erişen view’lerde, eklenen kolon otomatik olarak gösterilmez. Bunun nedeni SQL Server’ın view’den dönecek kolon bilgilerini metadata tablolarında saklamasıdır. Bu duruma “Persistent Metadata” denir.

[more]

Ne demek istediğimi bir örnek ile daha detaylı anlatmaya çalışayım.

Aşağıdaki script ile 3 kolondan oluşan bir tablo create edip, daha sonra bu tabloyu bir view’ın içerisinde “select *” şeklinde kullanıyorum.

create table tbl_Sample(a int, b int,c int)
go

create view v_1
as
	select * from tbl_Sample
go

Daha sonra ilgili tabloya aşağıdaki şekilde yeni bir kolon ekliyorum.

alter table tbl_Sample add d int
go

Bu işlemden sonra tabloya select çektiğimde 4 kolon görürken, view’i sorguladığım da 3 kolon görüyorum.

select * from tbl_Sample

select * from v_1

image

Bunun nedeni giriş paragrafında da belirttiğim gibi view’den dönecek kolonların metadata tablolarında saklanıyor olması. Bu kolon bilgilerine aşağıdaki kod ile erişebiliriz.

select * from sys.columns
where object_name(object_id) = 'v_1'

image

Peki view’in yeni eklenen bu kolonu görmesi için ne yapabiliriz. Elimizde 3 seçenek var.

  1. View’i drop-create etmek. Bu yöntem view üzerindeki permission’ları kaybetme durumundan dolayı tavsiye etmediğim yöntemdir.
  2. View’i alter etmek. View alter edildiğinde artık eklenen yeni kolon view sorgusu sonucu gelecektir.
  3. sp_refreshview sistem prosedürü ile view’in metadata bilgilerini refresh etmek. 3 yöntem arasında en tavsiye edeceğim yöntem budur.

Yukarıdaki örnekte kullandığım view’in metadata bilgilerini sp_refreshview ile güncelleyip kolonun geldiğini görelim.

exec sp_refreshview 'v_1'
go

select * from v_1

image

Yukarıdaki resimde de gördüğünüz gibi view sorgusu ile yeni eklenen kolona artık erişebiliyoruz.

Fakat bu esnada aklınıza şöyle bir soru gelebilir.

“Benim kolon eklediğim tablo belki de 100’lerce view’de kullanılıyor. Bu view’leri tek tek bulup hepsi için tek tek sp_refreshview yapmak çok zahmetli bir yöntem değil mi?”

Bu sorunuza da aşağıdaki şekilde çözüm bulabilirsiniz. Aşağıdaki sorgu ile değişiklik yaptığınız table’ı refere eden bütün view’ler için otomatik olarak sp_refresfview script’i oluşturabilirsiniz.

SELECT DISTINCT name as ViewName,'EXEC sp_refreshview ''' + name + '''' as Script
FROM sys.objects AS so 
INNER JOIN sys.sql_expression_dependencies AS sed 
    ON so.object_id = sed.referencing_id 
WHERE so.type = 'V' AND sed.referenced_id = OBJECT_ID('dbo.tbl_Sample');

image

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SQL Server’da tanımlı bir login’in şifresinin en son ne zaman değiştirildiğini bulmak için aşağıdaki fonksiyonu kullanabilirsiniz.

[more]

SELECT LOGINPROPERTY('LoginName', 'PasswordLastSetTime')

Örneğin “turgay” adlı login’in create edilme ve en son şifre değiştirilme tarihlerine aşağıdaki kod ile erişebiliriz.

SELECT create_date as CreateDate, 
	LOGINPROPERTY(name, 'PasswordLastSetTime') as PasswordLastChangeTime
FROM sys.server_principals
where name = 'turgay'

image

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan