Informácia o stĺpcoch tabuľky

Publikoval Michal Kočí dňa 8.10.2004 o 01:20 v kategórii SQL

Síce som sa už zapodieval exportom informácie o stĺpcoch tabuľky, ale stále mi v mnou načrtnutom riešení niečo chýbalo (napríklad export popisu stĺpca, ktorý som krvopotne zapísal v Enterprise Manager-ovi), takže som sa odhodlal s tým niečo spraviť.

Celkom sa mi pozdávala informácia, ktorú mi poskytovala uložená procedúra sp_help, ale ani to nebolo presne ono. Takže som ju trochu rozpitval a upravil k obrazu svojmu. Pridal som niektoré pre mňa životné informácie (no ten popis tam ozaj musím mať) a výsledok dávam k dispozícii. Faktom je, že som to moc neladil, tak pevne dúfam, že tam nie sú nejaké závažné chyby.

CREATE PROCEDURE TableInfo(
 @table_name nvarchar(256),
 @yes_text nvarchar(10),
 @no_text nvarchar(10),
 @na_text nvarchar(10)
)
AS
DECLARE @numtypes nvarchar(80)
DECLARE @charcolumns nvarchar(20)
DECLARE @charcolumnsunicode nvarchar(20)
SELECT @numtypes = 
N'tinyint,smallint,decimal,int,real,money,float,numeric,smallmoney' SELECT @charcolumnsunicode = N'nchar,nvarchar,ntext' SELECT @charcolumns = N'char,varchar,text' DECLARE @objid int SELECT @objid = object_id(@table_name) SELECT sc.name AS ColumnName, type_name(xusertype) AS ColumnType, CASE WHEN sc.iscomputed = 0 THEN @no_text ELSE @yes_text END AS ColumnIsComputed, CASE WHEN CharIndex(type_name(sc.xtype), @charcolumns) > 0 THEN Convert(char(5), sc.length) WHEN Charindex(type_name(sc.xtype), @charcolumnsunicode) > 0 THEN Convert(char(5), sc.length / 2) ELSE @na_text END AS CharacterColumnSize, Convert(int, sc.length) AS Length, CASE WHEN CharIndex(type_name(sc.xtype), @numtypes) > 0 THEN Convert(char(5), ColumnProperty(sc.id, sc.name, 'precision')) ELSE ' ' END AS ColumnPrecision, CASE WHEN CharIndex(type_name(sc.xtype), @numtypes) > 0 THEN Convert(char(5), OdbcScale(sc.xtype, sc.xscale)) ELSE ' ' END AS ColumnScale, CASE WHEN sc.isnullable = 0 THEN @no_text ELSE @yes_text END AS ColumnNullable, CASE ColumnProperty(sc.id, sc.name, 'IsIdentity') WHEN 1 THEN @yes_text WHEN 0 THEN @no_text ELSE @na_text END AS ColumnIsIdentity, CASE ColumnProperty(sc.id, sc.name, 'UsesAnsiTrim') WHEN 1 THEN @no_text WHEN 0 THEN @yes_text ELSE @na_text END AS TrimTrailingBlanks, CASE WHEN type_name(sc.xtype) NOT IN ('varbinary','varchar','binary','char') THEN @na_text WHEN sc.status & 0x20 = 0 THEN @no_text ELSE @yes_text END AS FixedLenNullInSource, CASE WHEN sc.collation IS NOT NULL THEN sc.collation ELSE @na_text END AS Collation, CASE WHEN sp.value IS NOT NULL THEN sp.value ELSE @na_text END AS ColumnDescription FROM syscolumns sc LEFT JOIN ( SELECT sp.id, sp.smallid, sp.value FROM sysproperties sp WHERE sp.name = 'MS_Description' ) AS sp ON sc.id = sp.id AND sc.colid = sp.smallid WHERE sc.id = @objid AND sc.number = 0 ORDER BY sc.colid GO

Použitie je jednoduché

TableInfo 'nazov tabulky', 'ano', 'nie', 'n/a'

Mohlo by ťa tiež zaujímať

Páčil sa ti príspevok?

Zdieľaj príspevok alebo si ho odlož na neskôr

Sleduj ma

Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.