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'
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.