SQL Server : Tablolar İçin Parametrik Sıralı Alan Listesi

Created with Sketch.

SQL Server : Tablolar İçin Parametrik Sıralı Alan Listesi

İ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');

 

Yorum yapılmamış

Yorumunuzu ekleyin