sqlserver 2000排名函数
名次生成方式1,重复时合并名次
SELECT * , Place=(SELECT COUNT(DISTINCT Score) +1 from jh03 WHERE Score >= a.Score)
from jh03 a
ORDER BY Place
名次生成方式2 , 重复时保留名次空缺
SELECT * , Place=(SELECT COUNT(Score) from jh03 WHERE Score > a.Score) + 1
from jh03 a
ORDER BY Place
......
SQL-Structured Query Language
--(开启SQL服务:net start mssqlserver)
--(在命令行中输入'sqlwb'命令可打开SQL管理器 )
--(如果要执行多条命令中的一条,鼠标选定后再按F5执行)
create database sales --创建一个名为sales的数据库
on
(
name='sales_data',
filename='d:\sales_data.mdf',
size=10,
maxsize=50,
filegrowth=5
)
log on
(
name='sales_log',
filename='d:\sales_log.ldf',
size=10,
maxsize=50,
filegrowth=5
)
drop database sales --删除所创建的数据库
sp_helpdb sales --查看 ......
1、查看原数据库备份情况:RESTORE FILELISTONLY from DISK = 'c:\NMGCNC-BABY_2009-4-1.dat' WITH NOUNLOAD, FILE = 1
2、进行数据库还原:
restore database babyAndwed from DISK = 'c:\NMGCNC-BABY_2009-4-1.dat' with move 'babyAndwed_Data' to
'c:\NMGCNC-BABY_Data.MDF',move 'babyAndwed_Log' to 'c:\NMGCNC-BABY_Log.LDF' ......
索引分为两大类:聚集索引和非聚集索引
一、聚集索引
当数据表中的一列被确定为主键后,SQLServer会自动为它建立聚集索引,因为聚集索引是标识每个记录行的键,所以它将被应用到每个查询中.
二、非聚集索引
非聚集索引的情况就比较复杂了,因为它是相对于表独立组织的,在SQLServer中有单独的结构来存储非聚集索引.
有一点是要注意的,不要代替查询优化器去指定某个索引,DBA应该想办法避免优化器不使用索引进行查询:
1、高碎片率
当索引碎片率超过40%的时候,优化器会放弃使用索引,因为在碎片率如此高的索引中扫描数据还不如直接到表中去扫描.
DBA应该常常监视索引碎片率,当达到30%的时候就要考虑重新组织索引
2、唯一性
如果一个索引不是唯一索引,那么优化器会认为直接到数据表中扫描比使用这个索引的效率要高
3、查询中使用了函数
当查询中使用了函数时,在该列上建立的索引是不会被使用的.
例如:col建立了索引,但是在查询中使用了 convert(nvarchar,col)=’test’,这时查询优化器不会使用该索引
4、查询错误的字段
如果建立组合字段的索引,那么只有当第一个列被查询使用时,该索引才会被使用
例如:建立一个索引(col1,col2,col3),当查询中使用col2= ......
procedure TForm1.Button3Click(Sender: TObject);
begin
//显示创建的数据集: dbgrid->datasource->clientdataset
//如果手工控制dbgrid显示宽度,dbgrid右键创建两个字段aa,bb,分别设置宽度即可
cds1.FieldDefs.Add('aa',ftString,40);
cds1.FieldDefs.Add('bb',ftInteger);
cds1.CreateDataSet;
cds1.Append;cds1.FieldValues['aa']:='a1';cds1.FieldValues['bb']:='10';cds1.Post;
cds1.Append;cds1.FieldValues['aa']:='a2';cds1.FieldValues['bb']:='20';cds1.Post;
cds1.Append;cds1.FieldValues['aa']:='a3';cds1.FieldValues['bb']:='30';cds1.Post;
//cds1.Active:=true;
//cds1.EmptyDataSet;
end; ......
procedure mc_SplitStr(sourStr:String;splitChar:String;desLst:TStringList);
var
tmpStr:String;
sValue:String;
iStart,iPos:Integer;
begin
try
desLst.Clear; //很重要,否则,会一直是第一个值
tmpStr:=sourStr;
iStart:=1;
iPos:=Pos(splitChar,tmpStr);
if iPos>0 then
begin
while iPos>0 do
begin
sValue:=MidBStr(tmpStr,iStart,iPos-iStart);
desLst.Add(sValue);
iPos:=iPos+length(splitChar); //跳过多分隔符情况下的剩余分隔字节
tmpStr:=midbstr(tmpStr,iPos,Length(tmpStr)-iPos+1);
iPos:=Pos( ......