收藏几个有意思的SQL脚本

快速获取表test的记录总数 : 
select rows from sysindexes where id = object_id('test'and indid in (0,1)

提取数据库内所有表的字段详细说明的SQL语句 :

SELECT 
(
case when a.colorder=1 then d.name else '' end) N'表名'

a.colorder N
'字段序号'

a.name N
'字段名'

(
case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then ''else ''
 
end) N'标识'

(
case when (SELECT count(*

FROM
 sysobjects 
WHERE (name in
 
(
SELECT
 name 
FROM
 sysindexes 
WHERE (id = a.id) AND (indid in
 
(
SELECT
 indid 
FROM
 sysindexkeys 
WHERE (id = a.id) AND (colid in
 
(
SELECT
 colid 
FROM
 syscolumns 
WHERE (id = a.id) AND (name = a.name))))))) AND
 
(xtype 
= 'PK'))>0 then '' else '' end) N'主键'

b.name N
'类型'

a.length N
'占用字节数'

COLUMNPROPERTY(a.id,a.name,'PRECISION'as N'长度'

isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0as N'小数位数'

(
case when a.isnullable=1 then ''else '' end) N'允许空'

isnull(e.text,'') N'默认值'

isnull(g.[value],''AS N'字段说明'
 
FROM
 syscolumns a 
left join
 systypes b 
on a.xtype=
b.xusertype 
inner join
 sysobjects d 
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
 
left join
 syscomments e 
on a.cdefault=
e.id 
left join
 sysproperties g 
on a.id=g.id AND a.colid =
 g.smallid 
order by object_name(a.id),a.colorder

获取表结构[把 'sysobjects' 替换 成 'tablename' 即可]

SELECT CASE IsNull(I.name, ''
When '' Then ''
 
Else '*'
 
End as
 IsPK, 
Object_Name(A.id) as
 t_name, 
A.name 
as
 c_name, 
IsNull(SubString(M.text1254), ''as
 pbc_init, 
T.name 
as
 F_DataType, 
CASE IsNull(TYPEPROPERTY(T.name, 'Scale'), ''

WHEN '' Then Cast(A.prec as varchar

ELSE Cast(A.prec as varchar+ ',' + Cast(A.scale as varchar

END as
 F_Scale, 
A.isnullable 
as
 F_isNullAble 
FROM Syscolumns as
 A 
JOIN Systypes as
 T 
ON (A.xType = T.xUserType AND A.Id = Object_id('sysobjects'
) ) 
LEFT JOIN ( SysIndexes as
 I 
JOIN Syscolumns as
 A1 
ON ( I.id = A1.id and A1.id = object_id('sysobjects'and (I.status & 0x800= 0x800 AND A1.colid <=
 I.keycnt) ) 
ON ( A.id = I.id AND A.name = index_col('sysobjects'
, I.indid, A1.colid) ) 
LEFT JOIN SysComments as
 M 
ON ( M.id = A.cdefault and ObjectProperty(A.cdefault, 'IsConstraint'= 1
 ) 
ORDER BY A.Colid ASC

四种方法取表里n到m条纪录:

1.
select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入
set rowcount n
select * from 表变量 order by columnname desc

2.
select top n * from (select top m * from tablename order by columnname) a order by columnname desc

3.如果tablename里没有其他identity列,那么:
select identity(int) id0,* into #temp from tablename

取n到m条的语句为:
select * from #temp where id0 >=and id0 <= m

如果你在执行
select identity(int) id0,* into #temp from tablename
这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行:
exec sp_dboption 你的DB名字,'select into/bulkcopy',true


4.如果表里有identity属性,那么简单:
select * from tablename where identitycol between n and m 
posted on 2006-11-21 23:18  IMustDo  阅读(233)  评论(0编辑  收藏  举报