Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SQL Server : Tablolar için parametrik sıralı alan listesi
#1
Merhaba,

İleride kullanılmak üzere elinizin altında bulunmasında fayda olduğunu düşündüğüm bir tablo değerli fonksiyon örneğini paylaşmak istiyorum; Bu fonksiyon temelde adını verdiğiniz tablonun sütun yapısını veri tablosu olarak vermeye yarıyor; 

Bunu bir view olarak yapmak da mümkündü fakat parametrik olması ve sıralama yapılabilmesi gibi avantajları nedeniyle (Multi-Statement Table-Value) şeklinde kodlamak cazip geldi diyelim...

SET  ANSI_NULLS  ON
GO
SET  QUOTED_IDENTIFIER  ON
GO
--  =============================================
--  Author       : <Uğur  PARLAYAN>
--  Create  date : <2017-06-30-2158>
--  Description  : <Tabloların sütun listesini ve bir kaç yararlı bilgiyi içerir>
--  =============================================
ALTER  FUNCTION  dbo.fnt_sys_Kolonlar( @TabloAdi VARCHAR(50) )
RETURNS  @SONUC TABLE
(  ID        INT
,  Kolon     VARCHAR(50)
,  VeriTipi  VARCHAR(50)
,  CharSet   VARCHAR(50)
,  Bayt      INT
,  Bos       BIT
,  Primal    BIT
)  AS BEGIN
    INSERT INTO @SONUC (ID, Kolon, Primal, VeriTipi, Bos, Bayt, CharSet)
    SELECT    
             C.ORDINAL_POSITION                          as  ID
          ,  C.COLUMN_NAME                               as  Kolon
          ,  iif(T.CONSTRAINT_TYPE='PRIMARY KEY',1,0)    as  Primal
          ,  C.DATA_TYPE                                 as  VeriTipi
          ,  iif(C.IS_NULLABLE='YES',  1,  0)            as  Bos
          ,  COALESCE(C.CHARACTER_MAXIMUM_LENGTH,  C.NUMERIC_PRECISION)  as  Bayt
          ,  C.CHARACTER_SET_NAME                        as  CharSet
    FROM     INFORMATION_SCHEMA.COLUMNS                 as  C  LEFT  OUTER
    JOIN     INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE as  U  ON  U.TABLE_NAME = C.TABLE_NAME  AND  U.COLUMN_NAME = C.COLUMN_NAME  LEFT  OUTER
    JOIN     INFORMATION_SCHEMA.TABLE_CONSTRAINTS       as  T  ON  T.TABLE_NAME = C.TABLE_NAME  AND  T.CONSTRAINT_NAME = U.CONSTRAINT_NAME
    WHERE    C.TABLE_NAME = @TabloAdi
    ORDER BY C.ORDINAL_POSITION
    ;
    RETURN
END
GO

Kullanımı ise oldukça basit;

SELECT * FROM dbo.fnt_sys_Kolonlar('Cariler');
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#2
Tekrar Merhaba,


Eğer tüm tabloların tüm sütunlarını listelemek istiyorsak yukarıdaki fonksiyonun WHERE kısmında şu değişikliği yapmak yeterli olacaktır;

WHERE C.TABLE_NAME = IIF ( ISNULL(@TabloAdi, '') = '', C.TABLE_NAME, @TabloAdi )


Eğer SQL sunucunuz IIF komutunu desteklemiyorsa CASE'yi de kullanabilirsiniz;

WHERE C.TABLE_NAME = CASE WHEN ISNULL(@TabloAdi, '') = '' THEN C.TABLE_NAME ELSE @TabloAdi END 

Oluşan yeni duruma göre kullanımı da şöyle olacaktır;

SELECT * FROM dbo.fnt_sys_Kolonlar('');

veya 

SELECT * FROM dbo.fnt_sys_Kolonlar(NULL);


Kolay gelsin...
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#3
Merhaba,
Paylaşım için teşekkürler.
Anlatmış olduğunuz fonksiyonel SQL yapısı hangi veri tabanlarında destekleniyor.
Delphi Can'dır!
WWW
Cevapla
#4
(01-07-2017, Saat: 15:24)DelphiCan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
Paylaşım için teşekkürler.
Anlatmış olduğunuz fonksiyonel SQL yapısı hangi veri tabanlarında destekleniyor.

Ben paylaşımlarımı genelde SQL Server üzerinden örneklerim, çoğunluğun da bir şekilde SQL Server ile dirsek temasında olması gerektiğini düşünenlerdenim. 

Sorunuza gelecek olursak; Kısa cevap = çoğu destekliyor

Tablo Değerli fonksiyonlar gelişmiş bazı veritabanı sistemlerinde halihazırda destekleniyor, bunlar;

SQL Server ( Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol )
IBM DB2 ( Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol )
Postgresql ( Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol )
Oracle ( Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol )

MySQL malesef bu işlevselliği desteklemiyor ama stored procedure kullanarak "destekliyormuş" gibi düşünebilirsiniz, olaya biraz farklı bir açıdan yaklaşmanız gerekiyor. ( Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol )

Maalesef SQLite'de böyle bir işlevselliğe rastlayamadım fakat şöyle bir makale var ve bu işlevselliğin nasıl eklenebileceği ile ilgili bazı tekniklerden bahsedilmiş: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol )

Son olarak MS-Access'de böyle bir işlevselliğe rastlayamadım ( belki vbscript ile benzer bir şeyler yapılabilir )
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#5
Access'te de bu tür özellikler mevcut olabilir.
Gizli sistem nesnelerini gösterirseniz orada tüm veritabanı yapılarının saklandığı tabloları görebilirsiniz.
İçinden istediğiniz tablodaki alanları satır halinde alabilirsiniz.
WWW
Cevapla
#6
(16-07-2018, Saat: 17:48)ssahinoglu Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlAccess'te de bu tür özellikler mevcut olabilir.
Gizli sistem nesnelerini gösterirseniz orada tüm veritabanı yapılarının saklandığı tabloları görebilirsiniz.
İçinden istediğiniz tablodaki alanları satır halinde alabilirsiniz.

Access ile ilgili bir örnek verebilir misiniz
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#7
(16-07-2018, Saat: 18:07)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(16-07-2018, Saat: 17:48)ssahinoglu Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlAccess'te de bu tür özellikler mevcut olabilir.
Gizli sistem nesnelerini gösterirseniz orada tüm veritabanı yapılarının saklandığı tabloları görebilirsiniz.
İçinden istediğiniz tablodaki alanları satır halinde alabilirsiniz.

Access ile ilgili bir örnek verebilir misiniz

MSysNameMap tablosunu ve diğerlerini inceleyebirsin kardeşim. Eskiden biraz daha kullanışlı veriler geliyordu ama 2016 sürümünde baktığımda binary şeklinde mevcut. Yine de isimleri içinden alabilirsin.

Veya sadece Access içinde kullanıyorsan fonksiyon yazabilirsin. Bazen SQL Server içinde iken de veritabanlarını bağlayıp bu tür özelliklerini alabiliyorsun. Ben bir ara SQL Server içine csv şeklinde txt dosyası bağlayıp benzer bir şey yapmıştım.
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  SQL Server : MySQL : Sayfalama, Pagination uparlayan 8 259 25-06-2018, Saat: 13:15
Son Yorum: klavye
  SQL Server : Tablo Değişkeni Kullanımı (Running Total, Yürüyen Bakiye Örneği) uparlayan 5 509 22-03-2018, Saat: 12:28
Son Yorum: hi_selamlar
  MS-SQL Server'da tekrar eden (çift, mükerrer) kayıtları tespit etme ve silme. csunguray 6 540 29-01-2018, Saat: 18:29
Son Yorum: adelphiforumz
  Datasnap + Rest Server -> Evrensel Veri Adaptörü - 001 - Sunucu Uygulaması mad85 7 714 17-11-2017, Saat: 22:56
Son Yorum: mad85
  SQL Server : Trigger hangi kipte çalışıyor uparlayan 9 1.120 13-09-2017, Saat: 14:43
Son Yorum: uparlayan



Konuyu Okuyanlar: 1 Ziyaretçi