2007-01-10

Add Linked Server

Dağıtık sorgular yazabilmek için SQL Serverlarınızı bir birbirine bağlayabilirsiniz. Bunun için sp_addlinkedserver sp'sini kullanabilirsiniz.

Söz dizimi:
sp_addlinkedserver [@server=] 'server' [, [@srvproduct=] 'product_name'] [, [@provider=] 'provider_name'] [, [@datasrc=] 'data_source'] [, [@location=] 'location'] [, [@provstr=] 'provider_string'] [, [@catalog=] 'catalog']

Örnek: CETURK adlı SQL Serverımızı kendi serverımıza link edelim:

USE master
EXEC sp_addlinkedserver 'CETURK', N'SQL Server'

Dipnot: Bu sp yi kullanabilmek için sysadmin ve setupadmin server rollerinizin olması lazım.

@@IDENTITY

INSERT işlemi esnasında tablonuza ekleme yaparken o andaki IDENTITY özelliğine sahip alanınızın değerini aşağıdaki gibi bulabilirsiniz:

INSERT INTO Tablo_Adi (Alan_Adlari)
VALUES (Eklenecek_Degerler)
SELECT @@IDENTITY AS 'Identity'

Araştırmalarım sonucu yukarıdaki iş için aşağıdaki 3 farklı değişken ve fonksiyonun olduğunu gördüm. Açıklama ve aradaki farklar aşağıdaki gibidir:
  • IDENT_CURRENT('Tablo_Adi') : Belirli bir tabloda herhangi bir oturum yada geçerlilik alanında en son Identity değerini döndürür.

Örnek: SELECT IDENT_CURRENT('Personel')

  • @@IDENTITY : Herhangi bir tabloda o anki bir oturum yada tüm geçerlilik alanlarında en son Identity değerini döndürür.
Örnek: SELECT @@IDENTITY
  • SCOPE_IDENTITY() : Herhangi bir tabloda o anki oturum yada o anki geçerlilik alanında en son Identity değerini döndürür.

Örnek: SELECT SCOPE_IDENTITY()

MD5 ile Şifreleme

İstediğiniz bilgileri şifrelemek için XP_MD5 Extended Stored Procedure kullanabilirsiniz.(xp_md5.dll dosyasını CodeProject'en indirebilirsiniz.)
xp_md5.dll dosyasını aşağıdaki gibi manuel olarak ekleyebilirsiniz(bu ekleme xp_md5 Extended Stored procedure nı oluşturur):

USE master;
EXEC sp_addextendedproc 'xp_md5', 'xp_md5.dll'

İşinize yarayacak şekilde xp_md5 içerecek bir User Defined Function oluşturabilirsiniz:

CREATE FUNCTION [dbo].[fn_md5] (@string VARCHAR(8000))
RETURNS CHAR(32)
AS
BEGIN
DECLARE @hash CHAR(32)
EXEC master.dbo.xp_md5 @string, @hash OUTPUT RETURN @hash
END


Tanımladığımız User Define Function u aşağıdaki gibi kullanabilirsiniz:

SELECT dbo.fn_md5('Hello world!')

Yukardaki ifadenin çıktısı : 86fb269d190d2c85f6e0468ceca42a20 olur.
Bunun yerine direk olarak xp_md5 Extended Stored Procedure nı da aşağıdaki şekilde kullanabilirsiniz:

EXEC master.dbo.xp_md5 'Hello world!'

Bu ifadenin çıktısı da: 86fb269d190d2c85f6e0468ceca42a20 olur.

Kullanıcı Silme

Var olan bir logini silmek için ise sp_droplogin sp'ü kullanabilirsiniz.
Syntax:
sp_droplogin [ @loginame = ] 'login'

Örnek: SQL Server'dan Mehmet loginname ni silelim:

EXEC sp_droplogin 'Mehmet'

Kısıtlama: Sadece sysadmin and securityadmin sunucu rollerine sahip olan kullanıcılar sp_droplogin sp'ünü kullanabilir.

Not: Silinmek istenen login herhangi bir database de map edilmişse sp_droplogin ile silinemez. Önce sp_dropuser ile kullanıcı silinmeli ardından login sp_droplogin ile silinmeli.

Kullanıcı Ekleme

SQL Server'a yeni bir login eklemek için sp_addlogin sp'sini kullanabilirsiniz.Syntaxı aşağıdaki gibidir:

sp_addlogin [ @loginame = ] 'login' [ , [ @passwd = ] 'password' ] [ , [ @defdb = ] 'database' ] [ , [ @deflanguage = ] 'language' ] [ , [ @sid = ] sid ] [ , [ @encryptopt = ] 'encryption_option' ]

Örnek: CETURK database ı için 'Mehmet' kullanıcı adı ve 'GÜZEL' şifreli logini aşağıdaki şekilde oluşturabiliriz:

EXEC sp_addlogin 'Mehmet','GÜZEL', 'CETURK'

Change Owner

MS SQL veritabanınızda bulunan bir nesnenin(tablo, view, sp .. vs) owner ını değiştirmek için sp_changeobjectowner sp'sini kullanabilirsiniz. Syntax'ı aşağıdaki gibidir:
sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'

Rastgele(Random) Kayıt

/*
"MS SQL de rastgele kayıtları nasıl alırım?" Bu soru bana sıklıkla sorulduğu için günlüğüme ekleme ihtiyacı hissettim. MS SQL de rastgele 11 kayıtı aşağıdaki şekilde seçebilirsiniz:
*/

SELECT TOP 11 Alan_Adlari
FROM Tablo_Adi
ORDER BY newid()


/*
Not: 11 i istediğiz gibi değiştirip istediğiniz kadar rastgele kayıt seçebilirsiniz. Bu tür şeyleri oyun yada yarışmalar için kullanabilirsiniz.
*/

2007-01-09

Tablo, View İzinleri

/*
Hangi kullanıcı adının hangi tablo ve viewda hangi haklara sahip olduğunu aşağıdaki SQL ile görebilirsiniz:
*/

SELECT *
FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES

Sistemdeki Kullanıcılar

/*
SQL Server üzerinde programınızı kullanan kullanıcı adlarını ve bunların bilgisayar adlarını aşağıdaki SQL kodu ile alabilirniz:
*/

SELECT DISTINCT loginame, hostname
FROM master.dbo.sysprocesses
WHERE program_name = Program_Adi

/*
Böylelikle Uygulamanızda Online olan kullanıcı ve bu kullanıcılara ait bilgileri görebilir. Bunlara ek olarak Kullanıcının ID si, Giriş Zamanı, Son Yaptığı İşlemim Zamanı, Lastspid, kullandıkları CPU ve memory miktarını izlebilirsiniz. Tüm bunları bir SP ye atmak yaralı olacaktır.
*/

Konfigürasyon Fonk.

  • @@CONNECTIONS: SQL Server’ın en son başlatılmasından sonra oluşan bağlantı sayısını verir.
  • @@LANGUAGE: Kullanılan dili verir.
  • @@MAX_CONNECTIONS: Aynı anda yapılabilecek max kullanıcı bağlantılarının sayısını verir.
  • @@SPID: Mevcut kullacı prosesinin numarasını verir.
  • @@SERVERNAME: Yerel server ın adını verir.
  • @@VERSION: SQL Server’ın versiyon numarasını verir.

Örnek:SELECT @@CONNECTIONS AS BAGLANTI_SAYISI--ifadesinin sonucunu SERVER'ımda 44440 olarak aldım.

Diğer fonksiyonları kendiniz SELECT ifadesiyle kullanıp sonucunu görebilirsiniz.

Dosya Kontrolü

Bir dosyanın olup olmadığını sp_MSexists_file ile öğrenebilirsiniz.Kullanımı : sp_MSexists_file TamPath, DosyaAdi şeklindedir.
Örnek: GUZEL.EXE adlı dosyamızın 'C:\MEHMET\ dizini altında olup olmadığını bulan bir SP yazalım:

DECLARE @DonusKodu INT
EXEC @DonusKodu = sp_MSexists_file 'C:\MEHMET\', 'GUZEL.EXE'
IF @DonusKodu = 1
PRINT 'Dosya Var'
ELSE
PRINT 'Dosya Yok'

.::YASAL UYARI::.

©2004-2024 Mehmet GÜZEL, www.mehmetguzel.net

Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.