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...
[Ars=sql]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[/ars]
Kullanımı ise oldukça basit;
[Ars=sql]SELECT * FROM dbo.fnt_sys_Kolonlar('Cariler');[/ars]
İ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...
[Ars=sql]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[/ars]
Kullanımı ise oldukça basit;
[Ars=sql]SELECT * FROM dbo.fnt_sys_Kolonlar('Cariler');[/ars]
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa