2007-01-31

TTNet'in Azizliği!

Uzun bir aradan sonra geçen ay sonunda ADSL başvurdum. 3 GB kota yeter dedim. Bu ay gelen faturada bir de ne göreyim: 6 GB kotalı yapmışlar ve ona göre fatura göndermişler. Hem de faturanın son ödeme tarihinden bir gün sonra fatura elime ulaştı. Müşteri hizmetlerini aradım. Bağlı bulunduğum Telekom müdürlüğünden tarife değişikliği yapmamı söylediler. Hem hata yapın, hem faturayı 2 kat gönderin, hem faturayı zamanında göndermeyin hem de hatanızı düzeltmek için ayağınıza kadar çağırın. Böylesine 3.dünya ülkelerinde rastlanır!

Neyse www.sikayetvar.com a şikayet gireyim dedim. Tek tek baktım şikayetlere. Baktığım hiçbir şikayetin çözülmediğini gördüm. Şirketin başarına bakayım dedim. Bir de ne göreyim %6 başarı. Yani 100 şikayetten 6 şikayete cevap verme zahmetinde bulunmuşlar. Aldığımız hizmet konusunda daha fırınla ekmek yememiz gerekiyor. Hele hele internet hizmetleri ile yine sınıfta kaldık. Bravo Türk Telekom güya özelleştin ama hala sözdeliğini kaybetmemişsin.

2007-01-30

ASP'den Word'e Aktarma

ASP sayfalarınızdaki bilgileri Word dokumanı olarak kaydedip üzerinde dilediğiniz değişikliği yapmak için aşağıdaki kod bloğunu kullanabilirsiniz:

Response.Buffer = True
Response.ContentType = "application/vnd.ms-word"
Response.AddHeader "content-disposition", "inline; filename = DosyaAdi.doc"

2007-01-29

Row_Number()

Row_Number() fonksiyonu SQL Server 2005 ile gelen yeni bir özellik. SQL Serverın 2005'ten önceki versiyonlarda kayıt sırasını gösteren bir fonksiyon yoktu. Ancak bunu Cursor içerisinde kendimiz hallediyorduk veyahut uygulama tarafında verileri çekip bunlara tek tek sıra numarası ekliyorduk. SQL Server 2005 in yanında Oracle'da Row_Number() fonksiyonunu destekleyen veritabanları arasında. Fakat çokça kullanılan PostgreSQL, DB2 ve MySQL gibi veri tabanları Row_Number()' ı henüz desteklemiyor.

Örnek:
SELECT ROW_NUMBER() OVER (ORDER BY CustomerID),* FROM Customers

2007-01-27

Sigaraya HAYIR!

Günlüğümün sevgili sakinleri,
Bu akşam içimden sigara ile ilgili bir şeyler karalamak geçti. Bugüne kadar hayatıma girmemiş olan sigaranın; siz sevgili günlük sakinlerinden kimin hayatına girmeyi başardığını kimlerin ise hayatına yanaşamadığını merak ettim. Tüm site sakinlerini ve ziyaretçileri klavye başına çağırıp sigara hakkında değerli yorumlarını yazmalarını bekliyorum.

Lütfen yorumlarınızı yazarken

  • sigara kullanıp kullanmadığınızı,
  • kullanıyorsanız ne kadar süredir kullandığınızı,
  • sigarayı hayatınızdan uzaklaştımanın vaktinin gelip gelmediğini,
  • sigarayi niçin kullandığınızı,
  • sigaranın kullanım amacınızın sizi tatmin edip etmediğini,
  • sigara içen arkadaşlara ne tür tavsiyelerde bulanabileceğinizi,
  • sigaranın nasıl bırakabileceği

vs gibi konulara değinmenizi rica edeceğim.

Bol oksijenli, yemyeşil ve sigarasız bir dünya temennisiyle herkese sağlıklı günler diliyorum.

2007-01-24

sp_special_columns

Bu SP ile bir tabloda unique olan alan adları ve bunlara ait bilgileri alabilirsiniz.

Syntax
sp_special_columns [@name=] 'name' [,[owner=] 'owner'] [,[@qualifier=] 'qualifier'] [,[@col_type=] 'col_type'] [,[@scope=] 'scope'] [,[@nullable=] 'nullable'] [,[@ODBCVer=] 'ODBCVer']

sp_server_info

sp_server_info SP ile SQL Serverınız hakkında birçok bilgiye ulaşabilirsiniz. İlişkili Veritabanı Sisteminin adı, versiyonu, collation tipi, index için kullanılacabilecek maksimum alan sayısı vs gibi bilgilere ulaşabilirsiniz.

Syntax
sp_server_info [[@attribute_id =] 'attribute_id']

Geleceğin 10 Mesleği

Trend's Journal dergisine göre geleceğin en iyi işi, mağazalarda alışveriş ortamı yaratan deneyim tasarımcılığı.

İşte geleceğin 10 mesleği:
  1. Deneyim Tasarımcısı
  2. Tibbi Araştırmalar
  3. Web Tasarımcısı
  4. İnternet Güvenliği
  5. Şehir Planlayıcısı
  6. Medya Promosyoncusu
  7. Yetenek Avcıları
  8. Satın Alma Ajanları
  9. Sanat Yönetmenleri
  10. Haber Analistleri

2007-01-22

SysObjects Tablosu XType

XType alanındaki değerleri merak eden arkadaşlar için açıklamalar aşağıdaki gibidir:
KodAçıklaması
CCHECK constraint
DDefault or DEFAULT constraint
FFOREIGN KEY constraint
LLog
FNScalar function
IFInline table-function
PStored procedure
RRule
PKPRIMARY KEY constraint (type is K)
RFReplication filter stored procedure
SSystem table
TFTable function
TRTrigger
UUser table
UQUNIQUE constraint (type is K)
VView
XExtended stored procedure

sp_pkeys ve sp_fkeys

Bir tablodaki primary key yada keyleri sp_pkeys, foreign keyleri ise sp_fkeys SP leri ile alabilirsiniz.

Syntax
sp_pkeys [ @table_name = ] 'name' [ , [ @table_owner = ] 'owner' ] [ , [ @table_qualifier = ] 'qualifier' ]

Syntax
sp_fkeys [ @pktable_name = ] 'pktable_name' [ , [ @pktable_owner = ] 'pktable_owner' ] [ , [ @pktable_qualifier = ] 'pktable_qualifier' ] { , [ @fktable_name = ] 'fktable_name' } [ , [ @fktable_owner = ] 'fktable_owner' ] [ , [ @fktable_qualifier = ] 'fktable_qualifier' ]

Örnek:
--Primary key için
EXEC sp_pkeys 'SIPARIS'

--Foreign key için
EXEC sp_fkeys 'SIPARIS'

sp_columns

Çoğumuz ah keşke şu tablomda bulunan alan adlarını ve bu alan adlarına ait tanımlamaları bir şekilde öğrensek dediğimiz oldu. Bunu system tablolarından yada kataloglar sayesinde zahmetli bir şekilde istediğimiz bilgiye ulaştık. MS SQL Server'da bu işi yapan sp_columns adlı SP miz var.

Syntax
sp_columns [ @table_name = ] object [ , [ @table_owner = ] owner ] [ , [ @table_qualifier = ] qualifier ] [ , [ @column_name = ] column ] [ , [ @ODBCVer = ] ODBCVer ]

sp_columns SP si ile aşağıdaki alanlara iat bilgiler elde edilebilir:
TABLE_QUALIFIER
TABLE_OWNER
TABLE_NAME
COLUMN_NAME
DATA_TYPE
TYPE_NAME
PRECISION
LENGTH
SCALE
RADIX
NULLABLE
REMARKS
COLUMN_DEF
SQL_DATA_TYPE
SQL_DATETIME_SUB
CHAR_OCTET_LENGTH
ORDINAL_POSITION
IS_NULLABLE SS_DATA_TYPE

Örnek: SIPARIS tablomuzda bulunan alan adları ve alan adlarının özelliklerini aşağıdaki komut ile alabiliriz.

EXEC sp_columns 'SIPARIS

sp_tables

Çoğu zaman merak ederiz: Veritabanımızda bulunan tablo adlarımızı nasıl alabiliriz diye. İşte veritabanında hangi tabloların olduğunu merak eden arkadaşlar için sp_tables adlı SP miz var. sp_tables ile tablo adlarının yanında tablonun tipine(SYSTEM TABLE, TABLE, VIEW) de erişebiliriz.

Syntax
sp_tables [ [ @table_name = ] 'name' ] [ , [ @table_owner = ] 'owner' ]
[ , [ @table_qualifier = ] 'qualifier' ] [ , [ @table_type = ] "type" ]


Örnek 1: Veritabanındaki tüm tablo adlarını listeleyelim.

exec sp_tables

Örnek 2: Veritabanımızda bulunan SIPARIS adlı tablomuzu listeleyelim.

exec sp_tables 'SIPARIS'


Örnek 3: Sadece veritabanımızda tabloları listeleyelim:

exec sp_tables @table_type="'TABLE'"


Örnek 4: Sadece veritabanımızda viewları listeleyelim:

exec sp_tables @table_type="'VIEW'"


Örnek 5: Sadece veritabanımızda sistem tablolarını listeleyelim:

exec sp_tables @table_type="'SYSTEM TABLE'"


sp_databases

sp_databases SP miz ile SQL Server altında bulunan veritabanlarının adları ve büyüklükleri hakkında bilgi alabiliriz.

Syntax
sp_databases

sp_stored_procedures

Daha önce SP isimlerinin listesini basit bir SQL ile halletmiştim. Şimdi ise yazdığım SQL in yerine MS SQL Server'da bu iş için yazılmış olan sp_stored_procedures ile de halledebiliriz:

Syntax
sp_stored_procedures [[@sp_name =] 'name'] [,[@sp_owner =] 'owner'] [,[@sp_qualifier =] 'qualifier']

Parametre olarak herhangi bir şey girmezseniz o aktif veritabanında bulunan tüm SP isimleri hakkında bilgi verir.

Registery Okuyup-Yazmak

Registery e yazmak için

Sub SaveSetting(AppName As String, Section As String, Key As String, Setting As String)

okumak için ise

Function GetSetting(AppName As String, Section As String, Key As String, [Default]) As String

komutlarını kullanabilirsiniz.

2007-01-20

sp_table_privileges

Tablo erişimi ile ilgili izinleri görebilmek için kullanılır.

Syntax:
sp_table_privileges [ @table_name_pattern = ] 'table_name_pattern' [ , [ @table_owner_pattern = ] 'table_owner_pattern' ] [ , [ @table_qualifier = ] 'table_qualifier' ]

SIPARIS tablomla ilgili izinlere bakmak istersem SP mizi aşağıdaki gibi çalıştırırız:

EXEC sp_table_privileges siparis

Sonuç çıktısı aşağıdaki gibi olur:

TABLE_QUALIFIERTABLE_OWNERTABLE_NAMEGRANTORGRANTEEPRIVILEGEIS_GRANTABLE
ithalatdboSIPARISdbodboDELETEYES
ithalatdboSIPARISdbodboINSERTYES
ithalatdboSIPARISdbodboREFERENCESYES
ithalatdboSIPARISdbodboSELECTYES
ithalatdboSIPARISdbodboUPDATEYES

SHUTDOWN

SQL Server servisini kısa yoldan SHUTDOWN komutu ile sonlandırabilirsiniz.

Syntax
SHUTDOWN [ WITH NOWAIT ]

Not: Bu komutu kullanabilmek için sysadmin ve serveradmin rollerine sahip olmanız lazım.

2007-01-19

Hedef Değiştirme Oyunu

Bilindiği üzere Agos Gazetesi Genel Yayın Yönetmeni Hrant Dink uğradığı silahlı saldırı sonucu hayatını kaybetti. Dink'e sıkılan kurşunlar Türkiye'ye sıkılmıştır. Kim yada kimlerden olursa olsun ve kim yada kimlere karşı yapılırsa yapılsın tüm cinayetleri ve menfur olayları kınıyorum.

Silahlı saldırının arkasındaki güçlerin Türkiye'yi dış siyasetten iç siyasete çekme niyetleri var. Son zamanlarda Türkiye'nin atmaya çalıştığı adımları analiz edip sonuçlarınının getireceklerini hayal edebilirsek kurşunların geliş yönünü de bulma imkanımız olur.

Elimizde Türkiye'nin satranç tahtasındaki hamleleri, karşı hamleler, zamanlama, seçilen kişi, sonuçlarla ilgili olasılıklar vs gibi argümanlar var. Bu parametreleri kullanarak kanlı ellerin fonksiyonu rahatlıkla bulunabilir.

KILL Komutu

Kill çalışan bir processi sonlandırmak için kullanılır. Parametre olarak sonlandırmak istediğimiz processin numarasını girerek ilgili processi sonlandırabiliriz.

Syntax
KILL {spid UOW} [WITH STATUSONLY]

Örnek: KILL 53
--53 nolu processi sonlandırır.

SP_LOCK

Aktif locklar hakkında bilgiyi raporlamaya yarar. Parametre kısmına process ID leri girerek processler hakkında bilgi alabilirsiniz. Herhangi bir parametre girmezseniz lock olan tüm processler listelenir.

Syntax:
sp_lock [[@spid1 =] 'spid1'] [,[@spid2 =] 'spid2']

Öğrenme İçin Öneriler

  • Okudukça okunulan kısımlar ile ilgili uygulamalar yapılmalı
  • Sadece bir kitap ile bağlı kalınmamalı internetten değişik kaynaklara bakılmalı, değişik kod örneklerine bakılmalı
  • Takıldığınız yerlerde forumları kullanınız hatta öğrendiklerinizi diğer insanlara aktarmaya çalışınız; onların sorularına cevap veriniz, çözümü bilmiyorsanız çözümü öğrenip öğrendiğiniz çözümü karşınızdaki kişilere aktarınız.
  • İlgili konu hakkında bahsedilen temel adımlarda aktiflik oldukça zamanla hayal edemediğiniz kadar ilerdiğinizi göreceksiniz.
  • İlerlediğinizi görmek sizi rehavete ve çokbilmişlik psikolojisine itip sizi köreltmesin her an öğrenme ve öğretme konusunda aç olun.

2007-01-17

Microsoft Zirvesi 2007

Microsoft 24-26 Ocak 2007 tarihleri arasında Lütfi Kırdar Uluslararası Kongre ve Sergi Sarayında bir dizi zirveye ev sahipliği yapacak. Zirve başlıkları aşağıdaki gibidir:
  • 2007 Microsoft Office Sistemi Zirvesi
  • Belediye Zirvesi
  • Dynamics AX 4.0 Lansmanı
  • Finans Zirvesi
  • Kurumsal İş Çözümleri Zirvesi
  • Üretim ve Parekende Zirvesi
  • Yazılım Geliştiriciler Zirvesi
  • Windows Vista Zirvesi

Yazılım Geliştiriciler Zirvesinde buluşmak dileğiyle..

2007-01-15

CETURK:1000.Mesaj

Şu an itibariyle bilişim sektöründe önemli bir boşluğu dolduran CETURK(Computer Engineering TURK) sitesinde 1000.mesajımı yazmış bulunmaktayım. Kurulduğu günden beri ilkeli, seviyeli ve geniş içerik yelpazesi ile ülkemizin bilişim alanındaki kaynak eksikliğini giderme yönünde emin adımlarla yürüyüp; teknik sorunların giderilmeye çalışıldığı CETURK her geçen gün büyüyüp gelişiyor.

Hep beraber nice GÜZELliklere; nice binlik mesajlara...

2007-01-12

Online Seçmen Kaydı Sorgulama

Seçimlere katılmak vatandaşlık görevlerimiz arasında. 2007 seçmen listelerinde isminizin olup olmadığını online olarak kontrol edebilirsiniz.
Sandık Bilgisi Sorgulama

2007-01-10

Nesneyi Gizleyip Gösterme

Bir web uygulamasında istediğimiz bir bileşenin belirli koşullar altında görünüp gizlenmesini isteyebilirsiniz. Bu tür bir istediği Ajax ile yapabilirim diyebilirsiniz. Ama klasik ASP de bu işi yapmak için birkaç yöntemden başka çareniz yok. Bu çözümlerden birisi olan Javascriptte nesnenin style özelliğini kullanacağım. Bu tekniğin yanında DIV i gizleyip gösterme yada Javascript kodu içerisinde de nesnemizi oluşturabiliriz.

ASP uygulamamda Debit Note Iptal seçeneği seçilince iptal gerekçesi için bir text alanının gözükmesini sağlayacağım. Diğer tüm durumlarda bu alan gözükmeyecek. Bunun için INPUT nesnemizin OnChange olayına aşağıdaki JavaScript kodunu yazmamız gerekir:

function IptalAciklama()
{
var f=document.FrmDebit;
var styleObj= document.getElementById("IptalAciklama").style;
if(f.Onay.value==3)
{
styleObj.visibility="visible";
}
else
{
styleObj.visibility="hidden";
}
}

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'

VT Nesneleri

Veritabanı nesneleri hakkında bilgi almak için sp_help i kullanabilirsiniz. Nesne hakkındaki bu bilgiler nesneyi oluşturan kişi, tipi, oluşturulma tarihi, içerdiği alanların veri tipi, verilerin uzunluğu, NULL olup olamayacağı(table, view vs için) vs hakkında bilgi verir.

EXEC sp_help @NesneAdi şeklinde kullanılır.

Örnek: EXEC sp_help V_ODEME --V_ODEME View'ımız hakkında detaylı bilgi verir.

Trigger Adları

/*
Veritabanınızdaki tüm Triggerların adlarının listesini aşağıdaki kodla alabilirsiniz:
*/

SELECT name
FROM sysobjects
WHERE xtype = 'TR'
ORDER BY name

SP Ad ve İçerikleri

/*
SQL Server'daki tüm SP 'lerin ad, id ve içeriklerini(text) veren SP miz aşağıdaki gibidir:
*/

SELECT sysobjects.name, sysobjects.id, syscomments.text
FROM syscomments INNER JOIN sysobjects ON syscomments.id = sysobjects.id
WHERE (sysobjects.xtype = 'P')

/*
Not: Bu SP yi kullanarak aradığınız kelimeleri içeren SP leri listeleyebilirsiniz.
*/

Tablo ve View Adları

/*
Veritabanınızadaki tablo(U) ve View(V) adlarını aşağıdaki SQL ile alabilirsiniz:
*/

SELECT * FROM sysobjects
WHERE (xtype = 'U') OR (xtype = 'V')

Encrypted Trigger Adları

/*
Sadece encrypted olan trigger adlarını aşağıdaki şekilde bulabilirsiniz:
*/

SELECT sysobjects.name
FROM syscomments INNER JOIN sysobjects ON syscomments.id = sysobjects.id
WHERE (sysobjects.xtype = 'TR') AND (syscomments.encrypted=1)

/*
Not: sysobjects.xtype ni 'SP' yaparak encrypted SP lere; 'V' yaparak encrypted viewlara ulaşabilirsiniz.
*/

Kullanıcı Hakları

Bir kullanıcının hangi veritabanı üzerinde hangi haklarının olduğunu master veritabanı üzerinde bulunan syslogins tablosundan alabiliriz. Aşağıdaki SQL ile tüm bu bilgileri görebilirsiniz:

SELECT * FROM master.dbo.syslogins

Tablo yapısı:

ColumnNameDataType Description
sidvarbinary(85)Security identifier.
statussmallintFor internal use only.
createdatedatetimeDate the login was added.
updatedatedatetimeDate the login was updated.
accdatedatetimeFor internal use only.
totcpuintFor internal use only.
totiointFor internal use only.
spacelimitintFor internal use only.
timelimitintFor internal use only.
resultlimitintFor internal use only.
namevarchar(30)Login ID of the user.
dbnamenvarchar(128)Name of the user's default database when connection is established.
passwordnvarchar(128)Encrypted password of the user (may be NULL).
languagenvarchar(128)User's default language.
denyloginint1, if login is a Microsoft® Windows NT® user or group and has been denied access.
hasaccessint1, if login has been granted access to the server.
isntnameint1 if login is a Windows NT user or group; 0 if the login is a Microsoft SQL Server™ login.
isntgroupint1, if login is a Windows NT group.
isntuserint1, if login is a Windows NT user.
sysadminint1, if login is a member of the sysadmin server role.
securityadminint1, if login is a member of the securityadmin server role.
serveradminint1, if login is a member of the serveradmin fixed server role.
setupadminint1, if login is a member of the setupadmin fixed server role.
processadminint1, if login is a member of the processadmin fixed server role.
diskadminint1, if login is a member of the diskadmin fixed server role.
dbcreatorint1, if login is a member of the dbcreator fixed server role.
loginnamenvarchar(128)Actual name of the login, which may be different from the login name used by SQL Server.

2007-01-07

Ajax'a Giriş

AJAX(Asynchronous JavaScript And XML), İnternet sayfalarında JavaScript ve XMLHttpRequest kullanımı ile etkileşimli uygulamalar yaratan tekniğin adıdır. Ajax, ne bir dil, ne de bir kütüphanedir. Ajax, sadece bir yöntemin adıdır. Ajax ile sayfalarımızı post etmeden sadece sayfanın belirli bir kısmınında istediğimiz değişikliği yapmamıza izin veriyor. Ajax, hem web trafiğini azaltır, hem de hızı artırmaktadır.

AJAX'ın kullandığı teknolojiler:
  • HTML/CSS
  • DOM/JavaScript
  • XML/XSLT/XMLHttpRequest

Tarihi : 1997 yılından beri kullanılıyor. Asenkronize yöntemlerin ilk örneği XMLHttpRequest ortaya çıkmadan Microsoft tarafından yapılan ve Java applet benzeri bir yapı kullanan Remote Scripting'dir. 2002'de özgür yazılım değişikliğiyle AJAX ortaya çıktı.2003'te de bu teknoloji ASP.Net'e de eklendi.

Avantajları:

  • Uygulamalar kullanıcının bilgisayarında çalıştığı için network performansı etkilenmez.
  • Sunucu daha çok kullanıcıya cevap verebilir çünkü kullanıcı başına daha az istek cevaplamak zorunda kalır.
  • Sunucu işlemciyi daha az kullanır.
  • Tamamen HTML kullanan yapılara oranla ağ daha az kullanılır.
  • Taşınabilirlik.

Dezavantajları/Zorlukları:

  • Browser'daki geri tuşunun içeriğinin Ajax ile tutulması mümkün değil.
  • Tarayıcıya göre farklı DOM tanımlamak gerekir.
  • İyi seviyedeki JavaScript bilgisi gerektirir.
  • İyi seviyede DHTML bilmek gerekir.

2007-01-04

Tarih Farkı

/*
İki Tarih Arasindaki Farkı gün, saat ve dakika cinsinden bulur.
*/

CREATE PROCEDURE TarihFarki
@start AS SMALLDATETIME,
@end AS SMALLDATETIME

AS

DECLARE @sure BIGINT
DECLARE @dakika INT
DECLARE @saat INT
DECLARE @gun INT
DECLARE @MSG AS VARCHAR(64)

SET @gun=0
SET @sure=DATEDIFF(MINUTE,@start, @end)

IF (@sure>=1440)
BEGIN
SET @gun=CAST((@sure/1440) AS INT)
SET @sure=@sure-@gun*1440
END
SET @dakika=@sure%60
SET @saat=CAST((@sure/60) AS INT)
SET @MSG='İki tarih arasındaki fark ' + CAST(@gun AS VARCHAR(5)) +' gün ' + CAST(@saat AS VARCHAR(5)) + ' saat ' + cast(@dakika AS VARCHAR(5)) + ' dakika'

SELECT @MSG

2007-01-03

User Defined Function


/*
Mevcut SQL fonksiyonları bize yetmediğinde kendi fonksiyonlarımızı yazarız. İhtiyaç duyduğunuz herhangi bir durum ve anda kullanabilirsiniz.

SP'lerin parametrelere değer atabilmelerine ve veri kümesi üretebilmelerine karşın fonksiyonlar hem değer döndürürler, hem SQL kodlarından kayıt kümesi üretirler, hem de içeride yeni bir kayıt kümesini geçici olarak oluşturup istemciye gönderebilirler. Bununla birlikte SP'ler fonksiyonların aksine bir değişkeni içeride değiştirip geri gönderebilirler.


Bir User Defined Function syntaxı aşağıdaki gibidir:
*/

/*
CREATE Fonksiyon_Adi(Giris_Parametreleri)
RETURNS Donus_Degeri
[WITH ]
AS
BEGIN
Fonksiyonun_Govdesi
RETURN Donus_Deyimi
END




Örnek vermek gerekirse Tarih bilgisindeki ayiraçlari istediğimiz gibi yapmak için aşağıdaki fonksiyonu kullanabiliriz:
*/

CREATE FUNCTION TarihFormati (@Tarih datetime, @Ayirac char(1))
RETURNS varchar(20)
AS
BEGIN
RETURN CONVERT(varchar(20),datepart(dd,@Tarih)) + @Ayirac + CONVERT(varchar(20),datepart(mm,@Tarih)) + @Ayirac + CONVERT(varchar(20),datepart(yy,@Tarih))
END




--Fonksiyonu oluşturduktan sonra aşağıdaki ifade ile sonucunu görebilirsiniz:
SELECTdbo.TarihFormati(GETDATE(),':')




/*
Sonuç: 9:1:2005 olur.
Fonsiyonu her yerden kullanabilirsiniz.Burda unutmamanız gereken nokta çağırdığınız yerde fonksiyonun owner ını yazmanız gerektiği. Yukarıda görüldüğü gibi ben dbo kullandım.
*/

.::YASAL UYARI::.

©2004-2023 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.