快速获取表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'),0) as 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.text, 1, 254), '') 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 >=n 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