一种用于生成可读结果集数据的实用程序存储过程,sp_autoformat 将重新设置长度可变的字符数据的宽度格式,以便只显示非空字符。输出中将截断尾随空白。
sp_autoformat <fulltabname>[, <selectlist>, <whereclause>, <orderby>]
<fulltabname>
指定从中选择数据的表的名称。如果对象所有者不是运行该命令的用户,请使用所有者名称。
<selectlist>
指定要从结果集中选择的以逗号分隔的列列表。使用 <name> = <column> 符号可对表中的列重命名。请参见示例。如果未提供 <selectlist>,则所指定表中的所有列都将以列 ID 顺序输出。
<whereclause>
是搜索谓词,被指定为 where 子句,用于从选定的表中过滤行。
<orderby>
是可选的 order by 子句,用于指定输出结果集的显示顺序。
从类似 select id, colid, name from syscolumns where id = 3 的 select 语句返回结果集(其中字符列的格式将自动设置):
1> sp_autoformat "syscolumns", "id, colid, name", "where id = 3"
2> go
id colid name
------------ ------ -----------
3 1 id
3 2 number
3 3 colid
3 4 status
3 5 type
3 6 length
3 7 offset
3 8 usertype
3 9 cdefault
3 10 domain
3 11 name
3 12 printfmt
3 13 prec
3 14 scale
3 15 remote_type
3 16 remote_name
3 17 xstatus
3 18 xtype
3 19 xdbid
3 21 accessrule
3 22 status2
使用下列语法重命名输出列:
[ <AS-Name label of Column> ][ ]*=[ ]*<column name>
<AS-Name label of Column> 是可选的,可在 = 分隔符两侧使用空格:
1> sp_autoformat syscolumns, "'Object Id' = id, 'Column Name'=name,
'Column ID'=colid", "where id = 3"
2> go
Object Id Column Name Column ID
------------ ----------- ---------
3 id 1
3 number 2
3 colid 3
3 status 4
3 type 5
3 length 6
3 offset 7
3 usertype 8
3 cdefault 9
3 domain 10
3 name 11
3 printfmt 12
3 prec 13
3 scale 14
3 remote_type 15
3 remote_name 16
3 xstatus 17
3 xtype 18
3 xdbid 19
3 accessrule 21
3 status2 22
(1 row affected)
使用 <orderby> 参数可以指定结果输出中的顺序:
sp_autoformat @fulltabname = 'syscolumns',
@selectlist = "id, name",
@orderby = "ORDER BY name"
要在从多个表中选择时生成自动设置格式的结果,或者如果 select 列表中的表达式具有复杂的 SQL select 语句,则必须:
使用临时表生成结果集:
下列命令将生成在所有系统目录中具有最高列 ID 的列的列表:
select o.id, o.name, c.colid, c.name
from sysobjects o, syscolumns c
where o.id < 100 and o.id = c.id
and c.colid = (select max(c2.colid) from syscolumns c2
where c2.id = c.id)
order by o.name
下列命令可生成自动设置了字符数据格式的相同结果集,并使用临时表来生成可读输出,其中还包括微小的更改,以便在临时表中提供列名:
select o.id, ObjectName = o.name, c.colid, ColumnName = c.name
into #result
from sysobjects o, syscolumns c
where o.id < 100 and o.id = c.id
and c.colid = (select max(c2.colid) from syscolumns c2
where c2.id = c.id)
对临时表使用 sp_autoformat 可生成格式化的输出:
1> exec sp_autoformat @fulltabname = #result, @orderby = "order by
ObjectName"
2> go
id ObjectName colid ColumnName
-------- ----------------- ------ -------------
11 sysalternates 2 altsuid
21 sysattributes 13 comments
55 syscertificates 6 suid
45 syscharsets 8 sortfile
3 syscolumns 22 status2
6 syscomments 8 status
37 sysconfigures 9 value4
17 sysconstraints 7 spare2
38 syscurconfigs 15 type
30 sysdatabases 19 status4
12 sysdepends 10 readobj
35 sysdevices 7 mirrorname
43 sysengines 12 starttime
...
(1 row affected)
(return status = 0)
生成临时表时将跳过原始 select 语句中的 order by 子句,而在生成输出结果时会将该子句添加到对 sp_autoformat 的调用中
可对临时表进行进一步处理,以便只报告对选定表的必需输出,如下所示:
1> exec sp_autoformat #result, "id, 'Object Name' = ObjectName,
'Column Name' = ColumnName", "where id < 5"
2> go
id Object Name Column Name
------- ----------- -----------
1 sysobjects loginame
2 sysindexes crdate
3 syscolumns status2
4 systypes accessrule
int(smallint、bigint、tinyint、unsignedint)numeric、money、date/time 以及 float、real 和 double precision 的列。
sp_autoformat,请从 tempdb 发出该过程。
<fulltabname> 参数指定的表中。如果引用了任何不存在的列,sp_autoformat 将失败。
返回代码包括:
sp_autoformat 的限制为:
3.以所需的输出格式对