??xml version="1.0" encoding="utf-8" standalone="yes"?>国产aⅴ无码专区亚洲av,亚洲国产精品福利片在线观看 ,亚洲欧洲日韩极速播放http://m.tkk7.com/WshmAndLily/category/24627.htmlzh-cnSun, 24 Feb 2008 10:09:16 GMTSun, 24 Feb 2008 10:09:16 GMT60sqlserver2005内部函数Q存储过E,以及数据库角?/title><link>http://m.tkk7.com/WshmAndLily/articles/181784.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sun, 24 Feb 2008 08:50:00 GMT</pubDate><guid>http://m.tkk7.com/WshmAndLily/articles/181784.html</guid><wfw:comment>http://m.tkk7.com/WshmAndLily/comments/181784.html</wfw:comment><comments>http://m.tkk7.com/WshmAndLily/articles/181784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/WshmAndLily/comments/commentRss/181784.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/WshmAndLily/services/trackbacks/181784.html</trackback:ping><description><![CDATA[/*日期函数*/<br /> DATEADD ( datepart , number, date ) <br /> --在向指定日期加上一D|间的基础上,q回新的 datetime 倹{?br /> DATEDIFF ( datepart , startdate , enddate ) <br /> --q回跨两个指定日期的日期和时间边界数?br /> DATENAME ( datepart , date )<br /> --q回代表指定日期的指定日期部分的字符丌Ӏ?br /> DATEPART ( datepart , date ) <br /> --q回代表指定日期的指定日期部分的整数?br /> DAY ( date ) <br /> --q回代表指定日期的天的日期部分的整数?br /> GETDATE ( )<br /> --?datetime 值的 Microsoft? SQL Server? 标准内部格式q回当前pȝ日期和时间?br /> GETUTCDATE()<br /> --q回表示当前 UTC 旉Q世界时间坐标或格林治标准旉Q的 datetime 倹{?br /> --当前?UTC 旉得自当前的本地时间和q行 SQL Server 的计机操作pȝ中的时区讄?br /> MONTH ( date )<br /> --q回代表指定日期月䆾的整数?br /> YEAR ( date )<br /> --q回表示指定日期中的q䆾的整数?br /> --------------------------------------------------------------------------<br /> /*字符串处理函?/<br /> LCASE( )<br /> LOWER( ) <br /> --字W串转换为小写字?<br /> LTRIM( ) <br /> --删除字符串前面的I格 <br /> SUBSTRING( ) <br /> --从字W串中提取一个或多个字符 <br /> UCASE( )<br /> UPPER( ) <br /> --字W串转换为大写字?<br /> ROUND( ) <br /> --数字按指定的小C数四舍五?<br /> FLOOR( ) <br /> --数字向下四舍五入ؓ最接近Q最)的整?<br /> CEILING( ) <br /> --数字向上四舍五入ؓ最接近的整?<br /> DATALENGTH( ) <br /> --q回指定的表辑ּ所用的字节?<br /> --------------------------------------------------------------------------<br /> USER( )<br /> USER_NAME( ) <br /> --q回当前用户?<br /> CONVERT( ) <br /> --数据从一U类型{换ؓ另一U类型?br /> SOUNDEX( ) <br /> --为可创徏"q似"搜烦的指定表辑ּq回 Soundex 代码?br /> STR( ) <br /> --数字数据{换ؓ字符Ԍ以便可以用文本运符对其q行处理?<br /> /*全局变量*/<br /> @@CONNECTIONS<br /> --服务器上ơ启动以来创建的q接?br /> @@CPU_BUSY  <br /> --?SQL Server 启动至今Q系l持l运行的毫秒数?br /> @@CURSOR_ROWS  <br /> --最q打开的游标中的行?br /> @@DATEFIRST   <br /> --SET DATEFIRST 参数的当前|该参数用于设|一个星期的W一天ؓ哪一天?br /> @@ERROR  <br /> --最后一?T-SQL 错误的错误号<br /> @@FETCH_STATUS <br /> --如果最后一ơ提取的状态ؓ成功状态,则ؓ 0。如果出错,则ؓ -1<br /> @@IDENTITY   <br /> --最后一ơ插入的标识?br /> @@LANGUAGE   <br /> --当前使用的语a的名U?br /> @@MAX_CONNECTIONS <br /> --可以创徏的同时连接的最大数<br /> @@ROWCOUNT   <br /> --受上一?SQL 语句影响的行?br /> @@SERVERNAME  <br /> --本地服务器的名称<br /> @@SERVICENAME  <br /> --该计机上的 SQL 服务的名U?br /> @@TIMETICKS  <br /> --当前计算Z每指令周期的微秒?br /> @@TRANSCOUNT  <br /> --当前q接打开的事务数<br /> @@VERSION   <br /> --SQL Server 的版本信?br /> -----------------------------------------------------------------------<br /> /*存储q程*/<br /> sp_databases --列出服务器上的所有数据库<br /> sp_server_info --列出服务器信息,如字W集Q版本和排列序<br /> sp_stored_procedures--列出当前环境中的所有存储过E?br /> sp_tables --列出当前环境中所有可以查询的对象<br /> sp_start_job --立即启动自动化Q?br /> sp_stop_job --停止正在执行的自动化d<br /> sp_password --d或修改登录帐L密码<br /> sp_configure --昄(不带选项)或更?带选项)当前服务器的全局配置讄<br /> sp_help --q回表的列名Q数据类型,U束cd{?br /> sp_helptext --昄规则Q默认|未加密的存储q程Q用户定义的函数Q?br /> --触发器或视图的实际文?br /> sp_helpfile --查看当前数据库信?br /> sp_dboption --昄或更Ҏ据库选项<br /> sp_detach_db --分离数据?br /> sp_attach_db --附加数据?br /> sp_addumpdevice --d讑֤<br /> sp_dropdevice --删除讑֤<br /> sp_pkeys --查看主键<br /> sp_fkeys --查看外键<br /> sp_helpdb --查看指定数据库相x件信?br /> sp_addtype --自徏数据cd<br /> sp_droptype --删除自徏数据cd<br /> sp_rename --重新命名数据?br /> sp_executesql --执行SQL语句<br /> sp_addlogin --d登陆<br /> sp_droplogin --删除d<br /> sp_grantdbaccess --把用h到dQ即d一个数据库安全帐户q授予塔讉K权限<br /> sp_revokedbaccess--撤销用户的数据访问权,即从数据库中删除一个安全帐?br /> sp_addrole --d角色<br /> sp_addrolemember --向角色中d成员Q其成为数据库角色的成?br /> sp_addsrvrolemember--修改d使其成ؓ固定服务器角色的成员<br /> sp_grantlogin --允许使用l帐hpȝ用户使用Windowsw䆾验证q接到SQL<br /> sp_defaultdb --修改一个登录的默认数据?br /> sp_helpindex --用于查看表的索引<br /> sp_cursoropen --定义与游标和游标选项相关的SQL语句Q然后生成游?br /> sp_cursorfetch --从游标中提取一行或多行<br /> sp_cursorclose --关闭q放游?br /> sp_cursoroption --讄各种游标选项<br /> sp_cursor --用于h定位更新<br /> sp_cursorprepare --把与游标有关的T-SQL语句或批处理~译成执行计划,但ƈ不创建游?br /> sp_cursorexecute --从由sp_cursorprepare创徏的执行计划中创徏q填充游?br /> sp_cursorunprepare --废弃由sp_cursorprepare生成的执行计?br /> sp_settriggerorder --指定W一个或最后一个激发的、与表关联的 AFTER 触发器。在W一?br /> --和最后一个触发器之间Ȁ发的 AFTER 触发器将按未定义的顺序执?br /> --------------------------------------------------------------------------------<br /> /*服务器角?/<br /> sysadmin<br /> --?SQL Server 中进行Q何活动。该角色的权限跨所有其它固定服务器角色?<br /> serveradmin <br /> --配置服务器范围的讄?<br /> setupadmin <br /> --d和删除链接服务器Qƈ执行某些pȝ存储q程Q如 sp_serveroptionQ?<br /> securityadmin <br /> --理服务器登录?<br /> processadmin <br /> --理?SQL Server 实例中运行的q程?<br /> dbcreator <br /> --创徏和改变数据库?<br /> diskadmin <br /> --理盘文g?<br /> bulkadmin <br /> --执行 BULK INSERT 语句?br /> /*数据库角?/<br /> public<br /> public 角色<br /> --public 角色是一个特D的数据库角Ԍ每个数据库用户都属于它。public 角色Q?<br /> --捕获数据库中用户的所有默认权限?br /> --无法用戗组或角色指z它,因ؓ默认情况下它们即属于该角艌Ӏ?br /> --含在每个数据库中Q包?master、msdb、tempdb、model 和所有用h据库?br /> --无法除去?br /> db_owner <br /> --q行所有数据库角色的活动,以及数据库中的其它维护和配置zd?br /> --该角色的权限跨越所有其它固定数据库角色?br /> db_accessadmin <br /> --在数据库中添加或删除 Windows NT 4.0 ?Windows 2000 l和用户以及 SQL Server 用户?<br /> db_datareader <br /> --查看来自数据库中所有用戯的全部数据?br /> db_datawriter <br /> --d、更Ҏ删除来自数据库中所有用戯的数?br /> db_ddladmin <br /> --d、修Ҏ除去数据库中的对?q行所?DDL)<br /> db_securityadmin <br /> --理 SQL Server 2000 数据库角色的角色和成员,q管理数据库中的语句和对象权?br /> db_backupoperator <br /> --有备份数据库的权?br /> db_denydatareader <br /> --拒绝选择数据库数据的权限<br /> db_denydatawriter<br /> --拒绝更改数据库数据的权限 <img src ="http://m.tkk7.com/WshmAndLily/aggbug/181784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/WshmAndLily/" target="_blank">semovy</a> 2008-02-24 16:50 <a href="http://m.tkk7.com/WshmAndLily/articles/181784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlserver2005基本操作http://m.tkk7.com/WshmAndLily/articles/181782.htmlsemovysemovySun, 24 Feb 2008 08:38:00 GMThttp://m.tkk7.com/WshmAndLily/articles/181782.htmlhttp://m.tkk7.com/WshmAndLily/comments/181782.htmlhttp://m.tkk7.com/WshmAndLily/articles/181782.html#Feedback0http://m.tkk7.com/WshmAndLily/comments/commentRss/181782.htmlhttp://m.tkk7.com/WshmAndLily/services/trackbacks/181782.htmlexec sp_renamedb 'Mytest','Mytest'--Ҏ据库重命?br /> go
--修改数据库属性,讄为只?br /> exec sp_dboption 'Mytest','read only',false--true
go
--讄数据库ؓ自动压羃
exec sp_dboption 'Mytest',autoshrink ,true--false
--收羃数据库的大小
DBCC shrinkdatabase ('Mytest',10)--压~数据库Mytest的大,以userdb中文件有10MB的可用空?br /> go
--分离数据?br /> exec sp_detach_db 'Mytest'
--附加数据?br /> exec sp_attach_db @dbname='Mytest',
                   @filename1='D:\Mytest\DB_data.mdf',
                   @filename2='D:\Mytest\DB_data.ldf';
--数据库的备䆾
go
exec sp_addumpdevice 'disk','mydiskdump','d:\Mytest\Mytest.dat'--创徏盘讑֤逻辑?br /> backup database Mytest to mydiskdump
go
--数据库的恢复
restore database 'Mytest'from mydiskdump
go
exec sp_dropdevice 'mydiskdump'
--查看数据?br /> sp_helpdbQsp_helpfilegroup,sp_database;
use Mytest
go

if exists (select *from sysobjects where name='Student')
--if object_id('Student','u')is not null)
drop table Student
create table Student
(
   Student_no   int   identity(1000,1),--自动增长 indentityQseedQincrementQ?seed是基数据Qincrement是增长的速率Q系l自动ؓ该列d数据
   Student_name varchar(20)
)
--两种插入数据的方?br /> insert into Student values('wubo')
insert into Student select 'zhang' union select 'lin'
--d主键U束
alter table Student add constraint s_pk primary key (Student_no)
--察看数据库mytest的信?br /> sp_helpdb mytest--或者sp_databases Mytest
select *from Student
--------------------------------------------------------------------
if exists (select *from sysobjects where name='Course')
drop table Course
create table Course
(
Course_no   int identity(1000,1),
Course_name varchar(20),

)
--讄服务器的identity关键字可以插入数?br /> set identity_insert course on
set identity_insert course off
insert into Course values( 'c','zhang')
insert into Course select 'java' union select 'c++'
select *From Course
--dU束公式
alter table table_name add constraint constraint_name constraint_type(column_name)
**********
alter table Course add constraint C_pk primary key (Course_no)
--察看U束公式
exec sp_helpconstraint table_name
**********
exec sp_helpconstraint Course
--删除主键U束
alter table Course drop C_pk
--d外键U束
alter table table_name add constraint constraint_name foreign key (column_name) references referenced_table(referenced_table's column_name)
--d列ƈ指定默认gؓNULLQ以前没有该列的数据都设|ؓNULL
alter table Course add Course_teacher varchar(20) default null
--删除?br /> alter table Course drop column Course_teacher
--重命名列
exec sp_rename 'Course.Course_teacher','Course_teacher', 'column'
--重命名表
exec sp_rename 'Course','NewCourse'
--复制表又复制数据,先创然后再复制数?自增和NOT NULL可以复制Q别的约束不能复?br /> select * into temp1 from Course
--只复制表l构
select *into temp from Course where 1>2
--删除表中元素,不能删除被引用的数据Q用以确保引用完整?br /> delete from Course where Course_name='c++'
/****************************************************/
--q两U方法不能被外键引用Q不可带条g删除
--删除表中所有元?写日?br /> delete table Course
--删除表中所有数据,不写日志Q不安全
truncate table Course
/***************************************************/
--模式匚wQ?匚wM字符Ԍ_匚wM一个字W,模式是大写敏感?br /> select *from Course where Course_name like 'c%'--只要W一个ؓc的字母就可以匚w
select *from Course where Course_name like 'c_+'--q个字符串有三个字符Q第二个字符可以使Q意的
select *from Course where Course_no between 1000 and 1002
/***************************************************/
--外键操作
create table dept
(
   d_id int primary key,
   d_name varchar(20)
)
create table emp
(
   e_id int primary key,
   e_name varchar(20),
   e_no int foreign key references dept(d_id) on update cascade on delete cascade
)
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
如果 timestamp 列是外键或被引用键的一部分Q则不能指定 CASCADE?br /> --外健的徏立是在主表徏立外健的列是唯一属性的情况下才能徏?br /> --on delete no action 无q更斎ͼ删除时外键冲H报错ƈ回滚delete
--on update no action 无q更斎ͼ更新时外键冲H报错ƈ回滚update
--on delete cascade 删除时可以联删?br /> --on update cascade 更新时可以联更?br /> --删除数据Ӟ先删除主表的数据Q然后删除从表的数据Q主表是Q被引用的表Q从表是Q引用的?br /> --插入数据Ӟ先插入被引用的表Q然后插入引用的表?br /> /***************************多表查询与聚?***************************/
create table company
(
c_id int primary key,
c_name varchar(20),
c_tel varchar(20)
)
create table dept
(
d_id int primary key,
d_name varchar(20),
d_tel varchar(20),
d_no int foreign key references company(c_id)
)
create table emp
(
e_id int primary key,
e_name varchar(20),
e_tel varchar(20),
e_no int foreign key references dept(d_id)
)
--插入数据
insert into company select 1000,'sun','110'
               union select 1001,'ibm','120'
               union select 1002,'mir','130'
               union select 1003,'top','140'
               union select 1004,'mos','150'
insert into dept select 1,'hr','1100',1000
            union select 2,'money','1200',1000
            union select 3,'kaifa','1300',1000
            union select 4,'zuzhi','1400',1000
insert into emp select 100,'wubo','1',1
          union select 101,'zhang','2',2
          union select 102,'lin','3',3
          union select 103,'linbo','4',4
select *from company
select *from dept
select *from emp
select * from emp left outer join dept on emp.e_no=dept.d_id left outer join company on dept.d_no=company.c_id
--左连接运时Q左边的在运后全部存在Q右边的不匹配的用NULL表示
select emp.e_id,emp.e_name from emp left outer join dept on emp.e_no=dept.d_id
--双接运时Q右表的在运后全部存在Q左边的不匹配的用NULL表示
select * from dept right outer join emp on emp.e_no=dept.d_id
--全连?br /> select *from dept full join emp on emp.e_no=dept.d_id
--交叉q接Q笛卡尔U)
没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔U。第一个表的行C以第二个表的行数{于W卡积l果集的大小
select e.employeeid, d.name as department from humanresources.employee e cross joinh umanresources.department d order by e.employeeid, d.name
--内连接:仅显CZ的连接表中的匚w行的q接
select * from goods inner join provider on goods.provider_id=provider.provider_id
--联合查询Q?br /> 联合查询 union all关键?
(1)两个或更多查询的结果合qؓ单个l果集,该结果集包含联合查询中的所有查询的全部行。UNION q算不同于用联接合q两个表中的列的q算?br /> (2) 下面列出了?UNION 合ƈ两个查询l果集的基本规则Q?
        所有查询中的列数和列的序必须相同?br />         数据cd必须兼容?br /> (3) all 参数:全部行q入l果中。其中包括重复行。如果未指定该参敎ͼ则删除重复行
------------------------------------------------------------------
--自引用问?br /> create table employ
(
e_id int primary key,
e_name varchar(23),
e_tel varchar(23),
e_high int foreign key references employ(e_id)
)
insert into employ select 1,'wubo','13484623684',null
             union select 2,'zhang','13772436004',1
             union select 3,'lin','12345678945',1
             union select 4,'bolin','231456789',2
select *From employ
select *from employ e inner join employ m on e.e_id=m.e_high





sqlserver2005基础知识
2007-05-29 15:55

--创徏数据库:
use master
--两种判断数据库是否存在的Ҏ
if db_id('Mytest')is not null******(if exists(select *from sysdatabases where name='Mytest'))
drop database Mytest
go
--exec xp_cmdshell 'mkdir D:\Mytest'--调用DOS命o创徏文g?br /> --sql server2005U有三种cd文g
L据文?mdfQ次要数据文?ndfQ日志文?ldf
create database Mytest
on
(name=Mytest_dat,
filename='D:\Mytest\DB_data.mdf',
--CREATE DATABASE p|?br /> --L件必至是 3 MB 才能容纳模型数据库的副本Q创Z数据文g
size=3mb,
--maxsize=??可以规定最大值当没有讄此项的时候,说明数据库是无限增长?br /> filegrowth=1mb 当文件大于设|的sizeӞ文g增长的大ؓ1Mb
)
log on--创徏日志文g           --Log文g的设|项和主文g的设|项一L
(
name=Mytest_log,
filename='D:\Mytest\DB_data.ldf',
size=1mb,
--maxsize=??可以规定最大?br /> filegrowth=1mb



semovy 2008-02-24 16:38 发表评论
]]>
动态创http://m.tkk7.com/WshmAndLily/articles/179974.htmlsemovysemovyThu, 14 Feb 2008 13:30:00 GMThttp://m.tkk7.com/WshmAndLily/articles/179974.htmlhttp://m.tkk7.com/WshmAndLily/comments/179974.htmlhttp://m.tkk7.com/WshmAndLily/articles/179974.html#Feedback0http://m.tkk7.com/WshmAndLily/comments/commentRss/179974.htmlhttp://m.tkk7.com/WshmAndLily/services/trackbacks/179974.html drop table item;
create table item(id int not null identity(1,1) primary key,categoryId int not null foreign key references category(cdID),itemName varchar(255) default '')
insert into item(categoryId,itemName) values(2,'杂志C?);
insert into item(categoryId,itemName) values(2,'dfsdf');
select * from item;


semovy 2008-02-14 21:30 发表评论
]]>
Ms SqlServer日期格式化大?/title><link>http://m.tkk7.com/WshmAndLily/articles/169557.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sat, 22 Dec 2007 06:06:00 GMT</pubDate><guid>http://m.tkk7.com/WshmAndLily/articles/169557.html</guid><wfw:comment>http://m.tkk7.com/WshmAndLily/comments/169557.html</wfw:comment><comments>http://m.tkk7.com/WshmAndLily/articles/169557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/WshmAndLily/comments/commentRss/169557.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/WshmAndLily/services/trackbacks/169557.html</trackback:ping><description><![CDATA[<div style="font-size: 12px"> <div style="text-align: center"></div> CONVERT<br /> 某U数据类型的表达式显式{换ؓ另一U数据类型。由于某些需求经常用到取日期格式的不?C下可?br /> SQL Server中 日期格式化.<br /> <br /> 使用 CONVERTQ?br /> <br /> CONVERT (data_type[(length)], expression [, style])<br /> <br /> <br /> select CONVERT(varchar, getdate(), 120 )<br /> 2004-09-12 11:06:08<br /> <br /> select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),\'-\',\'\'),\' \',\'\'),\':\',\'\')<br /> 20040912110608<br /> <br /> select CONVERT(varchar(12) , getdate(), 111 )<br /> 2004/09/12<br /> <br /> select CONVERT(varchar(12) , getdate(), 112 )<br /> 20040912<br /> <br /> select CONVERT(varchar(12) , getdate(), 102 )<br /> 2004.09.12<br /> <br /> select CONVERT(varchar(12) , getdate(), 101 )<br /> 09/12/2004<br /> <br /> select CONVERT(varchar(12) , getdate(), 103 )<br /> 12/09/2004<br /> <br /> select CONVERT(varchar(12) , getdate(), 104 )<br /> 12.09.2004<br /> <br /> select CONVERT(varchar(12) , getdate(), 105 )<br /> 12-09-2004<br /> <br /> select CONVERT(varchar(12) , getdate(), 106 )<br /> 12 09 2004<br /> <br /> select CONVERT(varchar(12) , getdate(), 107 )<br /> 09 12, 2004<br /> <br /> select CONVERT(varchar(12) , getdate(), 108 )<br /> 11:06:08<br /> <br /> select CONVERT(varchar(12) , getdate(), 109 )<br /> 09 12 2004 1<br /> <br /> select CONVERT(varchar(12) , getdate(), 110 )<br /> 09-12-2004<br /> <br /> select CONVERT(varchar(12) , getdate(), 113 )<br /> 12 09 2004 1<br /> <br /> select CONVERT(varchar(12) , getdate(), 114 )<br /> 11:06:08.177</div> <img src ="http://m.tkk7.com/WshmAndLily/aggbug/169557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/WshmAndLily/" target="_blank">semovy</a> 2007-12-22 14:06 <a href="http://m.tkk7.com/WshmAndLily/articles/169557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server SQL语句导入导出大全http://m.tkk7.com/WshmAndLily/articles/152254.htmlsemovysemovyFri, 12 Oct 2007 02:33:00 GMThttp://m.tkk7.com/WshmAndLily/articles/152254.htmlhttp://m.tkk7.com/WshmAndLily/comments/152254.htmlhttp://m.tkk7.com/WshmAndLily/articles/152254.html#Feedback0http://m.tkk7.com/WshmAndLily/comments/commentRss/152254.htmlhttp://m.tkk7.com/WshmAndLily/services/trackbacks/152254.html/*******  导出?a title="Excel相关知识技? target="_blank">Excel
EXEC master..XP_cmdshell ’bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""’

/***********  导入Excel
SELECT *
FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,
  ’Data Source="c:\test.xls";User ID=Admin;PassWord=;Extended properties=Excel 5.0’)...xactions

SELECT cast(cast(U目~号 as numeric(10,2)) as nvarchar(255))+’ ’ 转换后的别名
FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,
  ’Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions

/** 导入文本文g
EXEC master..xp_cmdshell ’bcp "dbname..tablename" in c:\DT.txt -c -Sservername -Usa -Ppassword’

/** 导出文本文g
EXEC master..xp_cmdshell ’bcp "dbname..tablename" out c:\DT.txt -c -Sservername -Usa -Ppassword’
?
EXEC master..xp_cmdshell ’bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword’

导出到TXT文本Q用逗号分开
exec master..xp_cmdshell ’bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password’

BULK INSERT 库名..表名
FROM ’c:\test.txt’
WITH (
    FIELDTERMINATOR = ’;’,
    ROWTERMINATOR = ’\n’
)

--/* dBase IV文g
select * from
OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’
,’dBase IV;HDR=NO;IMEX=2;DATABASE=C:\’,’select * from [客户资料4.dbf]’)
--*/

--/* dBase III文g
select * from
OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’
,’dBase III;HDR=NO;IMEX=2;DATABASE=C:\’,’select * from [客户资料3.dbf]’)
--*/

--/* FoxPro 数据?
select * from openrowset(’MSDASQL’,
’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\’,
’select * from [aa.DBF]’)
--*/

/**************导入DBF文g****************/
select * from openrowset(’MSDASQL’,
’Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF’,
’select * from customer where country != "USA" order by country’)
go
/***************** 导出到DBF ***************/
如果要导出数据到已经生成l构(即现存的)FOXPRO表中,可以直接用下面的SQL语句

insert into openrowset(’MSDASQL’,
’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\’,
’select * from [aa.DBF]’)
select * from ?

说明:

SourceDB=c:\  指定foxpro表所在的文g?
aa.DBF        指定foxpro表的文g?

/*************导出?a title="Access知识技? target="_blank">Access********************/
insert into openrowset(’Microsoft.Jet.OLEDB.4.0’,

 ’x:\A.mdb’;’admin’;’’,A? select * from 数据库名..B?

 

/*************导入Access********************/
insert into B?selet * from openrowset(’Microsoft.Jet.OLEDB.4.0’,
   ’x:\A.mdb’;’admin’;’’,A?

 

*********************  导入 XML 文g

DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc =’
<root>
  <Customer cid= "C1" name="Janine" city="Issaquah">
      <Order oid="O1" date="1/20/1996" amount="3.5" />
      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied
      </Order>
   </Customer>
   <Customer cid="C2" name="Ursula" city="Oelde" >
      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue
             white red">
            <Urgency>Important</Urgency>
            Happy Customer.
      </Order>
      <Order oid="O4" date="1/20/1996" amount="10000"/>
   </Customer>
</root>

-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, ’/root/Customer/Order’, 1)
      WITH (oid     char(5),
            amount  float,
            comment ntext ’text()’)
EXEC sp_xml_removedocument @idoc

/********************导整个数据库*********************************************/

用bcp实现?a title="存储相关资讯" target="_blank">存储q程

/*
 实现数据导入/导出的存储过E?
         Ҏ不同的参?可以实现导入/导出整个数据?单个?
 调用CZ:
--导出调用CZ
----导出单个?
exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:\zj.txt’,1
----导出整个数据?
exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:\docman’,1

--导入调用CZ
----导入单个?
exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:\zj.txt’,0
----导入整个数据?
exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:\docman’,0

*/
if exists(select 1 from sysobjects where name=’File2Table’ and objectproperty(id,’IsProcedure’)=1)
 drop procedure File2Table

go
create procedure File2Table
@servername varchar(200)  --服务?/a>?
,@username varchar(200)   --用户?如果用NT验证方式,则ؓI?#8217;’
,@password varchar(200)   --密码
,@tbname varchar(500)   --数据?dbo.表名,如果不指?.dbo.表名,则导出数据库的所有用戯
,@filename varchar(1000)  --导入/导出路径/文g?如果@tbname参数指明是导出整个数据库,则这个参数是文g存放路径,文g名自动用表名.txt
,@isout bit      --1为导?0为导?
as
declare @sql varchar(8000)

 

if @tbname like ’%.%.%’ --如果指定了表?则直接导出单个表
begin
 set @sql=’bcp ’+@tbname
  +case when @isout=1 then ’ out ’ else ’ in ’ end
  +’ "’+@filename+’" /w’
  +’ /S ’+@servername
  +case when isnull(@username,’’)=’’ then ’’ else ’ /U ’+@username end
  +’ /P ’+isnull(@password,’’)
 exec master..xp_cmdshell @sql
end
else
begin --导出整个数据?定义游标,取出所有的用户?
 declare @m_tbname varchar(250)
 if right(@filename,1)<>’\’ set @filename=@filename+’\’

 set @m_tbname=’declare #tb cursor for select name from ’+@tbname+’..sysobjects where xtype=’’U’’’
 exec(@m_tbname)
 open #tb
 fetch next from #tb into @m_tbname
 while @@fetch_status=0
 begin
  set @sql=’bcp ’+@tbname+’..’+@m_tbname
   +case when @isout=1 then ’ out ’ else ’ in ’ end
   +’ "’+@filename+@m_tbname+’.txt " /w’
   +’ /S ’+@servername
   +case when isnull(@username,’’)=’’ then ’’ else ’ /U ’+@username end
   +’ /P ’+isnull(@password,’’)
  exec master..xp_cmdshell @sql
  fetch next from #tb into @m_tbname
 end
 close #tb
 deallocate #tb 
end
go

 

/**********************Excel导到Txt****************************************/
想用
select * into opendatasource(...) from opendatasource(...)
实现一个Excel文g内容导入C个文本文?

假设Excel中有两列Q第一列ؓ姓名Q第二列为很行帐?16?
且银行帐号导出到文本文g后分两部分,?位和?位分开?

如果要用你上面的语句插入的话,文本文g必须存在,而且有一?姓名,银行账号1,银行账号2
然后可以用下面的语句进行插?
注意文g名和目录Ҏ你的实际情况q行
?/a>?

insert into
opendatasource(’MICROSOFT.JET.OLEDB.4.0’
,’Text;HDR=Yes;DATABASE=C:\’
)...[aa#txt]
--,aa#txt)
--*/
select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
from
opendatasource(’MICROSOFT.JET.OLEDB.4.0’
,’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls’
--,Sheet1$)
)...[Sheet1$]

如果你想直接插入q生成文本文?p用bcp

declare @sql varchar(8000),@tbname varchar(50)

--首先excel表内容导入到一个全局临时?
select @tbname=’[##temp’+cast(newid() as varchar(40))+’]’
 ,@sql=’select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
into ’+@tbname+’ from
opendatasource(’’MICROSOFT.JET.OLEDB.4.0’’
,’’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls’’
)...[Sheet1$]’
exec(@sql)

 

--然后用bcp从全局临时表导出到文本文g
set @sql=’bcp "’+@tbname+’" out "c:\aa.txt" /S"(local)" /P"" /c’
exec master..xp_cmdshell @sql

--删除临时?
exec(’drop table ’+@tbname)

用bcp文件导入导出到数据库的存储q程:

/*--bcp-二进制文件的导入导出

 支持image,text,ntext字段的导?导出
 image适合于二q制文g;text,ntext适合于文本数据文?

 注意:导入?覆盖满x件的所有行
  导出?把所有满x件的行也出到指定文g?

 此存储过E仅用bcp实现
邹徏 2003.08-----------------*/

/*--调用CZ
--数据导出
 exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:\zj1.dat’

--数据导出
 exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:\zj1.dat’,’’,0
--*/
if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[p_binaryIO]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
drop procedure [dbo].[p_binaryIO]
GO

Create proc p_binaryIO
@servename varchar (30),--服务器名U?
@username varchar (30), --用户?
@password varchar (30), --密码
@tbname varchar (500),  --数据?.表名
@fdname varchar (30),  --字段?
@fname varchar (1000), --目录+文g?处理q程中要使用/覆盖:@filename+.bak
@tj varchar (1000)=’’,  --处理条g.对于数据导入,如果条g中包含@fdname,h定表名前~
@isout bit=1   --1导出((默认),0导入
AS
declare @fname_in varchar(1000) --bcp处理应答文g?
 ,@fsize varchar(20)   --要处理的文g的大?
 ,@m_tbname varchar(50)  --临时表名
 ,@sql varchar(8000)

--则取得导入文件的大小
if @isout=1
 set @fsize=’0’
else
begin
 create table #tb(可选名 varchar(20),大小 int
  ,创徏日期 varchar(10),创徏旉 varchar(20)
  ,上次写操作日?varchar(10),上次写操作时?varchar(20)
  ,上次讉K日期 varchar(10),上次讉K旉 varchar(20),Ҏ?int)
 insert into #tb
 exec master..xp_getfiledetails @fname
 select @fsize=大小 from #tb
 drop table #tb
 if @fsize is null
 begin
  print ’文g未找?#8217;
  return
 end

end

 

--生成数据处理应答文g
set @m_tbname=’[##temp’+cast(newid() as varchar(40))+’]’
set @sql=’select * into ’+@m_tbname+’ from(
 select null as cd
 union all select 0 as 前缀
 union all select ’+@fsize+’ as 长度
 union all select null as l束
 union all select null as 格式
 ) a’
exec(@sql)
select @fname_in=@fname+’_temp’
 ,@sql=’bcp "’+@m_tbname+’" out "’+@fname_in
 +’" /S"’+@servename
 +case when isnull(@username,’’)=’’ then ’’
  else ’" /U"’+@username end
 +’" /P"’+isnull(@password,’’)+’" /c’
exec master..xp_cmdshell @sql
--删除临时?
set @sql=’drop table ’+@m_tbname
exec(@sql)

if @isout=1
begin
 set @sql=’bcp "select top 1 ’+@fdname+’ from ’ 
 +@tbname+case isnull(@tj,’’) when ’’ then ’’
   else ’ where ’+@tj end
  +’" queryout "’+@fname
  +’" /S"’+@servename
  +case when isnull(@username,’’)=’’ then ’’
   else ’" /U"’+@username end
  +’" /P"’+isnull(@password,’’)
  +’" /i"’+@fname_in+’"’
 exec master..xp_cmdshell @sql
end
else
begin
 --为数据导入准备时表
 set @sql=’select top 0 ’+@fdname+’ into ’
  +@m_tbname+’ from ’ +@tbname
 exec(@sql)

 

 --数据导入到临时?
 set @sql=’bcp "’+@m_tbname+’" in "’+@fname
  +’" /S"’+@servename
  +case when isnull(@username,’’)=’’ then ’’
   else ’" /U"’+@username end
  +’" /P"’+isnull(@password,’’)
  +’" /i"’+@fname_in+’"’
 exec master..xp_cmdshell @sql
 
 --数据导入到正式表中
 set @sql=’update ’+@tbname
  +’ set ’+@fdname+’=b.’+@fdname
  +’ from ’+@tbname+’ a,’
  +@m_tbname+’ b’
  +case isnull(@tj,’’) when ’’ then ’’
   else ’ where ’+@tj end
 exec(@sql)

 --删除数据处理临时?
 set @sql=’drop table ’+@m_tbname
end

--删除数据处理应答文g
set @sql=’del ’+@fname_in
exec master..xp_cmdshell @sql

go


/** 导入文本文g
EXEC master..xp_cmdshell ’bcp "dbname..tablename" in c:\DT.txt -c -Sservername -Usa -Ppassword’

改ؓ如下Q不需引号
EXEC master..xp_cmdshell ’bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword’

/** 导出文本文g
EXEC master..xp_cmdshell ’bcp "dbname..tablename" out c:\DT.txt -c -Sservername -Usa -Ppassword’
此句需加引?/p>

semovy 2007-10-12 10:33 发表评论
]]>
Sql Server实用操作技巧集?/title><link>http://m.tkk7.com/WshmAndLily/articles/152251.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Fri, 12 Oct 2007 02:29:00 GMT</pubDate><guid>http://m.tkk7.com/WshmAndLily/articles/152251.html</guid><wfw:comment>http://m.tkk7.com/WshmAndLily/comments/152251.html</wfw:comment><comments>http://m.tkk7.com/WshmAndLily/articles/152251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/WshmAndLily/comments/commentRss/152251.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/WshmAndLily/services/trackbacks/152251.html</trackback:ping><description><![CDATA[包括安装时提C有挂v的操作、收~数据库?a title="压羃软g技? target="_blank">压羃</a>数据库、{UL据库l新用户以已存在用户权限、检查备份集?a title="电脑gl修" target="_blank">?/a>复数据库{?<br /> Q一Q挂h?<br /> 在安装Sql或sp<a title="升补丁" target="_blank">补丁</a>的时候系l提CZ前有挂v的安装操作,要求重启Q这里往往重启无用Q解军_法: <br /> 到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager <br /> 删除PendingFileRenameOperations <br /> Q二Q收~数据库 <br /> --重徏索引 <br /> DBCC REINDEX <br /> DBCC INDEXDEFRAG <br /> --收羃数据和日?<br /> DBCC SHRINKDB <br /> DBCC SHRINKFILE <br /> Q三Q压~数据库 <br /> dbcc shrinkdatabase(dbname) <br /> Q四Q{UL据库l新用户以已存在用户权限 <br /> exec sp_change_users_login 'update_one','newname','oldname' <br /> go <br /> Q五Q检查备份集 <br /> RESTORE VERIFYONLY from disk='E:\dvbbs.bak' <br /> Q六Q修复数据库 <br /> ALTER DATABASE [dvbbs] SET SINGLE_USER <br /> GO <br /> DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK <br /> GO <br /> ALTER DATABASE [dvbbs] SET MULTI_USER <br /> GO <br /> <br /> --CHECKDB ?个参? <br /> --REPAIR_ALLOW_DATA_LOSS <br /> --执行由 REPAIR_REBUILD 完成的所有修复,包括对行和页q行分配和取消分配以Ҏ分配错误、结构行或页的错误,以及删除已损坏的文本对象。这些修复可能会D一些数据丢失。修复操作可以在用户事务下完成以允许用户回滚所做的更改。如果回滚修复,则数据库仍会含有错误Q应该从备䆾q行恢复。如果由于所提供修复{的缘故遗漏某个错误的修复Q则遗漏Q何取决于该修复的修复。修复完成后Q备份数据库?<br /> --REPAIR_FAST q行的、不耗时的修复操作,如修复非聚集索引中的附加键。这些修复可以很快完成,q且不会有丢失数据的危险?<br /> --REPAIR_REBUILD 执行?REPAIR_FAST 完成的所有修复,包括需要较长时间的修复Q如重徏索引Q。执行这些修复时不会有丢失数据的危险?<br /> --DBCC CHECKDB('dvbbs') with NO_INFOMSGS,PHYSICAL_ONLY <br /> SQL SERVER日志清除的两U方?<br /> 在用过E中大家l常到数据库日志非常大的情况,在这里介l了两种处理Ҏ…… <br /> Ҏ一 <br /> 一般情况下QSQL数据库的收羃q不能很大程度上减小数据库大,其主要作用是收羃日志大小Q应当定期进行此操作以免数据库日志过?<br /> 1、设|数据库模式为简单模式:打开SQL企业理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Serverl?->双击打开你的<a title="服务? target="_blank">服务?/a>-->双击打开数据库目?->选择你的数据库名Uͼ如论坛数据库ForumQ?->然后点击右键选择属?->选择选项-->在故障还原的模式中选择“?#8221;Q然后按定保存 <br /> 2、在当前数据库上点右键,看所有Q务中的收~数据库Q一般里面的默认讄不用调整Q直接点定 <br /> 3、收~数据库完成后,您的数据库属性重新设|ؓ标准模式Q操作方法同W一点,因ؓ日志在一些异常情况下往往是恢复数据库的重要依?<br /> Ҏ?<br /> SET NOCOUNT ON <br /> DECLARE @LogicalFileName sysname, <br /> ?@MaxMinutes INT, <br /> ?@NewSize INT <br /> <br /> USE tablename -- 要操作的数据库名 <br /> SELECT@LogicalFileName = 'tablename_log',?- 日志文g?<br /> @MaxMinutes = 10,?-- Limit on time allowed to wrap log. <br /> ?@NewSize = 1?- 你想讑֮的日志文件的大小(M) <br /> -- Setup / initialize <br /> DECLARE @OriginalSize int <br /> SELECT @OriginalSize = size <br /> FROM sysfiles <br /> WHERE name = @LogicalFileName <br /> SELECT 'Original Size of ' + db_name() + ' LOG is ' + <br /> ?CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + <br /> ?CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB' <br /> FROM sysfiles <br /> WHERE name = @LogicalFileName <br /> CREATE TABLE DummyTrans <br /> (DummyColumn char (8000) not null) <br /> <br /> DECLARE @Counter?INT, <br /> ?@StartTime DATETIME, <br /> ?@TruncLogVARCHAR(255) <br /> SELECT@StartTime = GETDATE(), <br /> ?@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY' <br /> DBCC SHRINKFILE (@LogicalFileName, @NewSize) <br /> EXEC (@TruncLog) <br /> -- Wrap the log if necessary. <br /> WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not e<a title="XP技?XPU笈" target="_blank">XP</a>ired <br />  AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)?<br />  AND (@OriginalSize * 8 /1024) > @NewSize?<br /> BEGIN -- Outer loop. <br /> ?SELECT @Counter = 0 <br /> ?WHILE?(@Counter < @OriginalSize / 16) AND (@Counter < 50000)) <br />  BEGIN -- update <br /> ?INSERT DummyTrans VALUES ('Fill Log')?<br /> ?DELETE DummyTrans <br /> ?SELECT @Counter = @Counter + 1 <br />  END?<br /> ?EXEC (@TruncLog)?<br /> END?<br /> SELECT 'Final Size of ' + db_name() + ' LOG is ' + <br /> ?CONVERT(VARCHAR(30),size) + ' 8K pages or ' + <br /> ?CONVERT(VARCHAR(30),(size*8/1024)) + 'MB' <br /> FROM sysfiles <br /> WHERE name = @LogicalFileName <br /> DROP TABLE DummyTrans <br /> SET NOCOUNT OFF <br /> <br /> <br /> 删除数据库中重复数据的几个方?<br /> 数据库的使用q程中由于程序方面的问题有时候会到重复数据Q重复数据导致了数据库部分设|不能正设|?#8230;… <br /> Ҏ一 <br /> declare @max integer,@id integer <br /> declare cur_rows cursor local for select dD?count(*) from 表名 group by dD?having count(*) > 1 <br /> open cur_rows <br /> fetch cur_rows into @id,@max <br /> while @@fetch_status=0 <br /> begin <br /> select @max = @max -1 <br /> set rowcount @max <br /> delete from 表名 where dD?= @id <br /> fetch cur_rows into @id,@max <br /> end <br /> close cur_rows <br /> set rowcount 0 <br /> Ҏ?<br /> 有两个意义上的重复记录,一是完全重复的记录Q也x有字D均重复的记录,二是部分关键字段重复的记录,比如Name字段重复Q而其他字D不一定重复或都重复可以忽略?<br /> 1、对于第一U重复,比较Ҏ解决Q?<br /> ?select distinct * from tableName <br /> 可以得到无重复记录的结果集?<br /> 如果该表需要删除重复的记录Q重复记录保?条)Q可以按以下Ҏ删除 <br /> ?select distinct * into #Tmp from tableName <br /> ?drop table tableName <br /> ?select * into tableName from #Tmp <br /> ?drop table #Tmp <br /> 发生q种重复的原因是表设计不周生的Q增加唯一索引列即可解冟?<br /> 2、这c重复问题通常要求保留重复记录中的W一条记录,操作Ҏ如下 <br /> ?假设有重复的字段为Name,AddressQ要求得到这两个字段唯一的结果集 <br /> ?select identity(int,1,1) as autoID, * into #Tmp from tableName <br /> ?select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID <br /> ?select * from #Tmp where autoID in(select autoID from #tmp2) <br /> ?最后一个select卛_CNameQAddress不重复的l果集(但多了一个autoID字段Q实际写时可以写在select子句中省L列) <br /> <br /> <br /> 更改数据库中表的所属用L两个Ҏ <br /> 大家可能会经常碰C个数据库备䆾q原到另外一台机器结果导致所有的表都不能打开了,原因是徏表的时候采用了当时的数据库用户…… <br /> <br /> --更改某个?<br /> exec sp_changeobjectowner 'tablename','dbo' <br /> <br /> --<a title="存储相关资讯" target="_blank">存储</a>更改全部?<br /> CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch <br /> @OldOwner as NVARCHAR(128), <br /> @NewOwner as NVARCHAR(128) <br /> AS <br /> DECLARE @Name?as NVARCHAR(128) <br /> DECLARE @Owneras NVARCHAR(128) <br /> DECLARE @OwnerNameas NVARCHAR(128) <br /> DECLARE curObject CURSOR FOR <br /> select 'Name'?= name, <br /> 'Owner'?= user_name(uid) <br /> from sysobjects <br /> where user_name(uid)=@OldOwner <br /> order by name <br /> OPENcurObject <br /> FETCH NEXT FROM curObject INTO @Name, @Owner <br /> WHILE(@@FETCH_STATUS=0) <br /> BEGIN <br /> if @Owner=@OldOwner <br /> begin <br /> set @OwnerName = @OldOwner + '.' + rtrim(@Name) <br /> exec sp_changeobjectowner @OwnerName, @NewOwner <br /> end <br /> -- select @name,@NewOwner,@OldOwner <br /> FETCH NEXT FROM curObject INTO @Name, @Owner <br /> END <br /> close curObject <br /> deallocate curObject <br /> <br /> GO <br /> <br /> SQL SERVER中直接@环写入数?<br /> 没什么好说的了,大家自己看,有时候有点用?<br /> declare @i int <br /> set @i=1 <br /> while @i<30 <br /> begin <br /> insert into test (userid) values(@i) <br /> set @i=@i+1 <br /> end <br /> <br /> <br /> 无数据库日志文g恢复数据库方法两?<br /> 数据库日志文件的误删或别的原因引h据库日志的损?<br /> <br /> Ҏ一 <br /> 1.新徏一个同名的数据?<br /> 2.再停掉sql server(注意不要分离数据? <br /> 3.用原数据库的数据文g覆盖掉这个新建的数据?<br /> 4.再重启sql server <br /> 5.此时打开企业理器时会出现置疑,先不,执行下面的语句(注意修改其中的数据库? <br /> 6.完成后一般就可以讉K数据库中的数据了,q时,数据库本w一般还要问?解决办法?利用 <br /> 数据库的脚本创徏一个新的数据库,q将数据Dd行了. <br /> USE MASTER <br /> GO <br /> SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE <br /> GO <br /> UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='|疑的数据库? <br /> Go <br /> sp_dboption '|疑的数据库?, 'single user', 'true' <br /> Go <br /> DBCC CHECKDB('|疑的数据库?) <br /> Go <br /> update sysdatabases set status =28 where name='|疑的数据库? <br /> Go <br /> sp_configure 'allow updates', 0 reconfigure with override <br /> Go <br /> sp_dboption '|疑的数据库?, 'single user', 'false' <br /> Go <br /> Ҏ?<br /> 事情的v?<br /> 昨天Q系l管理员告诉我,我们一个内部应用数据库所在的盘I间不了。我注意到数据库事g日志文gXXX_Data.ldf文g已经增长C3GBQ于是我x~小q个日志文g。经q收~数据库{操作未果后Q我犯了一个自q入行业以来的最大最愚蠢的错误:竟然误删除了q个日志文gQ后来我看到所有论及数据库恢复的文章上妓档溃骸拔蘼廴篈呛_)?a href="<a target="_blank" href_cetemp='http://hackbase.com/hacker"'>http://hackbase.com/hacker"</a> target="_blank">数据库日志文件存在,它至关重?#8221;Q甚臛_软甚x一KB文章讲如何只靠日志文件恢复数据库的。我真是不知道我那时候是怎么想的Q! <br /> q下子坏了!q个数据库连不上了,企业理器在它的旁边写着“(|疑)”。而且最要命的,q个数据库从来没有备份了。我唯一扑־到的是迁Udq前的另外一个数据库服务器,应用倒是能用了,但是了许多记录、表和存储过E。真希望q只是一场噩梦! <br /> 没有效果的恢复步?<br /> 附加数据?<br /> _Rambo讲过被删除日志文件中不存在活动日志时Q可以这么做来恢复: <br /> 1Q分被|疑的数据库Q可以用sp_detach_db <br /> 2Q附加数据库Q可以用sp_attach_single_file_db <br /> 但是Q很遗憾Q执行之后,SQL Server质疑数据文g和日志文件不W,所以无法附加数据库数据文g?<br /> DTS数据导出 <br /> 不行Q无法读取XXX数据库,DTS Wizard报告?#8220;初始化上下文发生错误”?<br /> 紧急模?<br /> 怡红公子讲过没有日志用于恢复Ӟ可以q么做: <br /> 1Q把数据库设|ؓemergency mode <br /> 2Q重新徏立一个log文g <br /> 3Q把SQL Server 重新启动一?<br /> 4Q把应用数据库设|成单用h?<br /> 5Q做DBCC CHECKDB <br /> 6Q如果没有什么大问题可以把数据库状态改回去了,记得别忘了把pȝ表的修改选项x <br /> <br /> 我实践了一下,把应用数据库的数据文件移赎ͼ重新建立一个同名的数据库XXXQ然后停掉SQL服务Q把原来的数据文件再覆盖回来。之后,按照怡红公子的步骤走?<br /> 但是Q也很遗憾,除了W?步之外,其他步骤执行非常<a title="成功技? target="_blank">成功</a>。可惜,重启SQL Server之后Q这个应用数据库仍然是置疑! <br /> 不过Q让我欣慰的是,q么做之后,倒是能够Select数据了,让我大出一口气。只不过Q组件用数据库Ӟ报告_“发生错误Q?2147467259,未能在数据库 'XXX' 中运?BEGIN TRANSACTIONQ因数据库处于回避恢复模式?#8221; <br /> <br /> 最l成功恢复的全部步骤 <br /> 讄数据库ؓ紧急模?<br /> ?停掉SQL Server服务Q?<br /> 把应用数据库的数据文gXXX_Data.mdfU走Q?<br />  重新建立一个同名的数据库XXXQ?<br /> 停掉SQL服务Q?<br />  把原来的数据文g再覆盖回来; <br /> q行以下语句Q把该数据库讄为紧急模式; <br /> ?q行“Use Master <br /> Go <br /> sp_configure 'allow updates', 1 <br /> reconfigure with override <br /> Go” <br /> 执行l果Q?<br /> DBCC 执行完毕。如?DBCC 输出了错误信息,请与pȝ理员联pR?<br /> 已将配置选项 'allow updates' ?0 改ؓ 1。请q行 RECONFIGURE 语句以安装?<br /> <br /> 接着q行“update sysdatabases set status = 32768 where name = 'XXX'” <br /> 执行l果Q?<br /> Q所影响的行Cؓ 1 行) <br /> <br />  重启SQL Server服务Q?<br /> q行以下语句Q把应用数据库设|ؓSingle User模式Q?<br />  q行“sp_dboption 'XXX', 'single user', 'true'” <br /> 执行l果Q?<br />  命o已成功完成?<br /> <br /> ü 做DBCC CHECKDBQ?<br />  q行“DBCC CHECKDB('XXX')” <br /> 执行l果Q?<br /> 'XXX' ?DBCC l果?<br /> 'sysobjects' ?DBCC l果?<br /> 对象 'sysobjects' ?273 行,q些行位?5 中?<br /> 'sysindexes' ?DBCC l果?<br /> 对象 'sysindexes' ?202 行,q些行位?7 中?<br /> 'syscolumns' ?DBCC l果?<br /> ……… <br /> <br /> ü q行以下语句把系l表的修攚w项xQ?<br />  q行“sp_resetstatus "XXX" <br /> go <br /> sp_configure 'allow updates', 0 <br /> reconfigure with override <br /> Go” <br /> 执行l果Q?<br /> ?sysdatabases 中更新数据库 'XXX' 的条目之前,模式 = 0Q状?= 28Q状?suspect_bit = 0Q, <br /> 没有更新 sysdatabases 中的M行,因ؓ已正地重置了模式和状态。没有错误,未进行Q何更攏V?<br /> DBCC 执行完毕。如?DBCC 输出了错误信息,请与pȝ理员联pR?<br /> 已将配置选项 'allow updates' ?1 改ؓ 0。请q行 RECONFIGURE 语句以安装?<br /> <br /> ?重新建立另外一个数据库XXX.LostQ?<br /> DTS导出向导 <br /> q行DTS导出向导Q?<br /> 复制源选择EmergencyMode的数据库XXXQ导入到XXX.LostQ?<br /> ?选择“在SQL Server数据库之间复制对象和数据”Q试了多ơ,好像不行Q只是复制过来了所有表l构Q但是没有数据,也没有视囑֒存储q程Q而且DTS向导最后报告复制失败; <br /> 所以最后选择“从源数据库复制表和视?#8221;Q但是后来发玎ͼq样L只能复制一部分表记录; <br />  于是选择“用一条查询指定要传输的数?#8221;Q缺哪个表记录,导哪个Q?<br /> ?视图和存储过E是执行SQL语句d的?<br /> <br /> l护Sql Server中表的烦?<br /> 在用和创徏数据库烦引中l常会碰C些问题,在这里可以采用一些另cȝҎ解决… <br /> --W一步:查看是否需要维护,查看扫描密度/Scan Density是否?00% <br /> declare @table_id int <br /> set @table_id=object_id('表名') <br /> dbcc showcontig(@table_id) <br /> --W二?重构表烦?<br /> dbcc dbreindex('表名',pk_索引?100) <br /> --重做W一步,如发现扫描密?Scan Densityq是于100%则重构表的所有烦?<br /> --杨铮Qƈ不一定能?00%?<br /> dbcc dbreindex('表名','',100) <br /> <br /> SQL Server补丁安装常见问题 <br /> 谁碰到问题就看看咯:Q?<br /> 一、补丁安装过E中常见问题 <br /> <br /> 如果在安装补丁的时候遇到如下类似错误: <br /> 1、安装过E中出现“以前q行的程序创Z挂v的文件操作,q行安装E序前,必须重新启动”Q请按照下面步骤解决Q?<br /> a、重启机器,再进行安装,如果发现q有该错误,h下面步骤 <br /> b、在开?>q行?a title="输入法技? target="_blank">输入</a>regedit <br /> c、到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 位置 <br /> d、选择文g->倒出,保存 <br /> e、在双H口叛_PendingFileRenameOperationsQ选择删除Q然后确?<br /> f、重启安装,问题解决 <br /> 如果q有同样问题Q请查其?a title="注册表相关知识技? target="_blank">注册?/a>中是否有该值存在,如有请删掉?<br /> 2、在安装SQL Server SP3Q有时候会出现Q无论用windows<a title="|络考试认证" target="_blank">认证</a>q是混和认证Q都出现密码错误的情况,q时查看临时目录下的sqlsp.outQ会发现以下描述Q?<br /> [TCP/IP Sockets]Specified SQL server not found. <br /> [TCP/IP Sockets]ConnectionOpen (Connect()). <br /> 其实q是SQL Server SP3的一个小bugQ在安装sp3的时候,没有监听tcp/ip端口Q可以按照以下步骤进行: <br /> 1、打开SQL server客户器网l实用工具和服务器网l工P保启用的协议中包含name pipeQƈ且位|在W一? <br /> 2、确保[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\<a title="MSSQL" target="_blank">MSSQL</a>Server\Client\ConnectTo] <br /> "DSQUERY"="DBNETLIB". <br /> 如果没有Q请自己建立 <br /> 3、停止mssql. <br /> 4、进行安? <br /> q样可以进行正安装了?<br /> 二、SQL Server补丁版本的检?<br /> SQL Server的补丁版本检查不如Windows 补丁版本查直接,一个系l管理员Q如果不了解SQL Server版本对应的补丁号Q可能也会遇C炚w烦,因此在这说明一下,通过q样的办法判别机器是<a title="|络安全资讯" target="_blank">安全</a>的办法,不会对系l生Q何媄响?<br /> 1、用Isql或者SQL查询分析器登录到SQL ServerQ如果是用IsqlQ请在cmdH口输入isql -U sa,然后输入密码Q进入;如果是用SQL查询分析器,请从E序中启动,输入sa和密码(也可以用windows验证Q?<br /> 2、在ISQL中输入: <br /> Select @@VersionQ?<br /> <br /> go <br /> 或者SQL查询分析器中输入(其实如果不想输入Q只要打开帮助的关于就可以?)) <br /> Select @@VersionQ?<br /> 然后按执行; <br /> q时会返回SQL的版本信息,如下Q?<br /> Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 3) <br /> 其中?.00.760是SQL Server的版本和补丁受对应关pd下: <br /> 8.00.194 Q——————SQL Server 2000 RTM <br /> 8.00.384 Q—————?SP1) <br /> 8.00.534 Q—————?SP2) <br /> 8.00.760 Q—————?SP3) <br /> q样我们p看到SQL Server的正版本和补丁号了?<br /> 我们也可以用xp_msver看到更详l的信息 <br /> <br /> Sql Server数据库的备䆾和恢复措?<br /> 最常用的操作,新手们看?#8230;… <br /> 一、备份数据库 <br /> <br /> 1、打开SQL企业理器,在控制台根目录中依次点开Microsoft SQL Server <br /> 2、SQL Serverl?->双击打开你的服务?->双击打开数据库目?<br /> 3、选择你的数据库名Uͼ如论坛数据库ForumQ?->然后点上面菜单中的工?->选择备䆾数据?<br /> 4、备份选项选择完全备䆾Q目的中的备份到如果原来有\径和名称则选中名称点删除,然后Ҏ加,如果原来没有路径和名U则直接选择dQ接着指定路径和文件名Q指定后点确定返回备份窗口,接着点确定进行备?<br /> <br /> 二、还原数据库 <br /> <br /> 1、打开SQL企业理器,在控制台根目录中依次点开Microsoft SQL Server <br /> 2、SQL Serverl?->双击打开你的服务?->点图标栏的新建数据库图标Q新建数据库的名字自行取 <br /> 3、点L建好的数据库名称Q如论坛数据库ForumQ?->然后点上面菜单中的工?->选择恢复数据?<br /> 4、在弹出来的H口中的q原选项中选择从设?->炚w择讑֤-->Ҏ?->然后选择你的备䆾文g?->d后点定q回Q这时候设备栏应该出现您刚才选择的数据库备䆾文g名,备䆾号默认ؓ1Q如果您对同一个文件做q多ơ备份,可以点击备䆾h边的查看内容Q在复选框中选择最新的一ơ备份后点确定)-->然后点击上方常规旁边的选项按钮 <br /> 5、在出现的窗口中选择在现有数据库上强制还原,以及在恢复完成状态中选择使数据库可以l箋q行但无法还原其它事务日志的选项。在H口的中间部位的数据库文gq原里要按照你SQL的安装进行设|(也可以指定自q目录Q,逻辑文g名不需要改动,U至物理文g名要Ҏ你所恢复的机器情况做改动Q如您的SQL数据库装在D:\Program Files\Microsoft SQL Server\MSSQL\DataQ那么就按照您恢复机器的目录q行相关改动改动Qƈ且最后的文g名最好改成您当前的数据库名(如原来是bbs_data.mdfQ现在的数据库是forumQ就Ҏforum_data.mdfQ,日志和数据文仉要按照这L方式做相关的改动Q日志的文g名是*_log.ldfl尾的)Q这里的恢复目录您可以自p|,前提是该目录必须存在Q如您可以指定d:\sqldata\bbs_data.mdf或者d:\sqldata\bbs_log.ldfQ,否则恢复报?<br /> 6、修改完成后Q点M面的定q行恢复Q这时会出现一个进度条Q提C恢复的q度Q恢复完成后pȝ会自动提C成功,如中间提C报错,误录下相关的错误内容ƈ询问对SQL操作比较熟悉的h员,一般的错误无非是目录错误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误Q数据库正在使用的错误您可以试关闭所有关于SQLH口然后重新打开q行恢复操作Q如果还提示正在使用的错误可以将SQL服务停止然后重v看看Q至于上q其它的错误一般都能按照错误内容做相应改动后即可恢?<br /> <br /> 三、收~数据库 <br /> <br /> 一般情况下QSQL数据库的收羃q不能很大程度上减小数据库大,其主要作用是收羃日志大小Q应当定期进行此操作以免数据库日志过?<br /> 1、设|数据库模式为简单模式:打开SQL企业理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Serverl?->双击打开你的服务?->双击打开数据库目?->选择你的数据库名Uͼ如论坛数据库ForumQ?->然后点击右键选择属?->选择选项-->在故障还原的模式中选择“?#8221;Q然后按定保存 <br /> 2、在当前数据库上点右键,看所有Q务中的收~数据库Q一般里面的默认讄不用调整Q直接点定 <br /> 3、收~数据库完成后,您的数据库属性重新设|ؓ标准模式Q操作方法同W一点,因ؓ日志在一些异常情况下往往是恢复数据库的重要依?<br /> <br /> 四、设定每日自动备份数据库 <br /> <br /> 强烈有条件的用户q行此操作! <br /> 1、打开企业理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Serverl?->双击打开你的服务?<br /> 2、然后点上面菜单中的工具-->选择数据库维护计划器 <br /> 3、下一步选择要进行自动备份的数据-->下一步更新数据优化信息,q里一般不用做选择-->下一步检查数据完整性,也一般不选择 <br /> 4、下一步指定数据库l护计划Q默认的?周备份一ơ,点击更改选择每天备䆾后点定 <br /> 5、下一步指定备份的盘目录Q选择指定目录Q如您可以在D盘新Z个目录如Qd:\databakQ然后在q里选择使用此目录,如果您的数据库比较多最好选择为每个数据库建立子目录,然后选择删除早于多少天前的备份,一般设?Q?天,q看您的具体备䆾要求Q备份文件扩展名一般都是bakq默认?<br /> 6、下一步指定事务日志备份计划,看您的需要做选择-->下一步要生成的报表,一般不做选择-->下一步维护计划历史记录,最好用默认的选项-->下一步完?<br /> 7、完成后pȝ很可能会提示Sql Server Agent服务未启动,先点定完成计划讑֮Q然后找到桌面最双状态栏中的SQLl色图标Q双ȝ开Q在服务中选择Sql Server AgentQ然后点击运行箭_选上下方的当启动OS时自动启动服?<br /> 8、这个时候数据库计划已经成功的运行了Q他按照您上面的设|进行自动备?<br /> <br /> 修改计划Q?<br /> 1、打开企业理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Serverl?->双击打开你的服务?->理-->数据库维护计?->打开后可看到你设定的计划Q可以进行修Ҏ者删除操?<br /> 五、数据的转移Q新建数据库或{UL务器Q?<br /> <br /> 一般情况下Q最好用备份和q原操作来进行{UL据,在特D情况下Q可以用导入导出的方式进行{U,q里介绍的就是导入导出方式,导入导出方式转移数据一个作用就是可以在收羃数据库无效的情况下用来减(收羃Q数据库的大,本操作默认ؓ您对SQL的操作有一定的了解Q如果对其中的部分操作不理解Q可以咨询动|相关h员或者查询网上资?<br /> 1、将原数据库的所有表、存储过E导出成一个SQL文gQ导出的时候注意在选项中选择~写索引脚本和编写主键、外键、默认值和查约束脚本选项 <br /> 2、新建数据库Q对新徏数据库执行第一步中所建立的SQL文g <br /> 3、用SQL的导入导出方式,Ҏ数据库导入原数据库中的所有表内容 <br /> <br /> 利用数据库日志恢复数据到旉点的操作 <br /> ׃不正常的数据丢失Q而又不想使用备䆾数据q原Q只要原来有备䆾且当前日志保存完好,可以采用q个Ҏ试试Q说不定可挽回损?#8230;… <br /> 1Q如果误操作之前存在一个全库备份(或已有多个差异备份或增量备䆾Q,首先要做的事是q?<br /> q行一ơ日志备份(如果Z不让日志文g变大而置trunc. log on chkpt.选项?那你死了Q?<br /> ?backup log dbName to disk='fileName' <br /> 2Q恢复一个全库备份,注意需要用with norecoveryQ如果还有其他差异或增量备䆾Q则逐个?<br /> ?<br /> ?restore database dbName from disk='fileName' with norecovery <br /> 3Q恢复最后一个日志备份即刚做的日志备份,指定恢复旉点到误操作之前的时刻 <br /> ?restore log dbName from disk='fileName' <br /> ?with stopat='date_time' <br /> <br /> 以上q些操作都可以在SQL SERVER企业理器里完成Q难度不大。。?<br /> <br /> 当然Q如果误操作是一些不记日志的操作比如truncate tableQselect into{操作,那么是无法利 <br /> 用上q方法来恢复数据?.. <br /> <br /> SQL Server2000数据库文件损坏时如何恢复 <br /> 出现q样的问题是比较严重的了Q能否修复只能看你的q气…… <br /> SQL Server2000中,如果数据库文Ӟ非系l数据库文gQ遇到错误的时候,仅适用于非master,msdb的数据库?<br /> 说明如下Q?<br /> 1 Z个测试数据库test(数据库类型ؓ完全) <br /> 2 Z个表Q插入点记录 <br /> create table a(c1 varchar(2)) <br /> go <br /> insert into a values('aa') <br /> go <br /> insert into a values('bb') <br /> go <br /> 3 作完全备份,到文件test_1.bak <br /> 4 在作一点修?<br /> insert into a values('cc') <br /> go <br /> create table b(c1 int) <br /> go <br /> insert into b values(1) <br /> go <br /> insert into b values(2) <br /> go <br /> 5 shutdown 数据库服务器 <br /> 6 用ultraedit~辑数据库文件test_data.mdf,随便修改点字节内?相当于数据库遭到致命的损坏?<br /> 7 启动数据库,q且q行企业理器,点开数据库,看到test变成灰色Q而且昄|疑?<br /> 8 q行isql -SLocalhost -Usa -P <br /> 1> backup log test TO DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKUP <br /> est_2.bak' WITH NO_TRUNCATE <br /> 2>go <br /> 已处?2 ,q些属于数据库 'test' 的文?'TEST_Log'Q位于文?1 上)?<br /> BACKUP LOG 操作成功地处理了 2 ,p?0.111 U(0.087 MB/U)?<br /> 9 q行恢复最老的完全备䆾 <br /> 1> RESTORE DATABASE test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQL <br /> BACKUP est_1.bak' WITH NORECOVERY <br /> 2> go <br /> 已处?96 ,q些属于数据库 'test' 的文?'TEST_Data'Q位于文?1 上)?<br /> 已处?1 ,q些属于数据库 'test' 的文?'TEST_Log'Q位于文?1 上)?<br /> RESTORE DATABASE 操作成功地处理了 97 ,p?0.107 U(7.368 MB/U)?<br /> 10 恢复最q的日志 <br /> 1> RESTORE LOG test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKU <br /> P est_2.bak' WITH RECOVERY <br /> 2> go <br /> 已处?2 ,q些属于数据库 'test' 的文?'TEST_Log'Q位于文?1 上)?<br /> RESTORE LOG 操作成功地处理了 2 ,p?0.056 U(0.173 MB/U)?<br /> <br /> <br /> <br /> 存储q程~写l验和优化措?<br /> l验之谈Q看?#8230;… <br /> 一、适合读者对象:数据库开发程序员Q数据库的数据量很多Q涉及到对SPQ存储过E)的优化的目开发h员,Ҏ据库有浓厚兴的人?  <br /> <br />   二、介l:在数据库的开发过E中Q经怼遇到复杂的业务逻辑和对数据库的操作Q这个时候就会用SP来封装数据库操作。如果项目的SP较多Q书写又没有一定的规范Q将会媄响以后的pȝl护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,׃遇到优化的问题,否则速度有可能很慢,l过亲nl验Q一个经q优化过的SP要比一个性能差的SP的效率甚至高几百倍?  <br /> <br />   三、内容:   <br /> <br />   1、开发h员如果用到其他库的Table或ViewQ务必在当前库中建立View来实现跨库操作,最好不要直接?#8220;databse.dbo.table_name”Q因为sp_depends不能昄SP所使用的跨库table或viewQ不方便校验。   <br /> <br />   2、开发h员在提交SP前,必须已经使用set showplan on分析q查询计划,做过自n的查询优化检查?  <br /> <br />   3、高E序q行效率Q优化应用程序,在SP~写q程中应该注意以下几点:    <br /> <br />   a)SQL的用规范: <br />   i. 量避免大事务操作,慎用holdlock子句Q提高系lƈ发能力?<br /> <br />    ii. 量避免反复讉K同一张或几张表,其是数据量较大的表Q可以考虑先根据条件提取数据到临时表中Q然后再做连接?<br /> <br />    iii. 量避免使用游标Q因为游标的效率较差Q如果游标操作的数据过1万行Q那么就应该改写Q如果用了游标Q就要尽量避免在游标循环中再q行表连接的操作?<br /> <br />    iv. 注意where字句写法Q必考虑语句序Q应该根据烦引顺序、范围大来定条g子句的前后顺序,可能的让字D顺序与索引序怸_范围从大到小?<br /> <br />    v. 不要在where子句中的“=”左边q行函数、算术运或其他表达式运,否则pȝ可能无法正用烦引?<br /> <br />    vi. 量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用Q而且count(1)比count(*)更有效率?<br /> <br />    vii. 量使用“>=”Q不要?#8220;>”?<br /> <br />    viii. 注意一些or子句和union子句之间的替?<br /> <br />    ix. 注意表之间连接的数据cdQ避免不同类型数据之间的q接?<br /> <br />    x. 注意存储q程中参数和数据cd的关pR?<br /> <br />    xi. 注意insert、update操作的数据量Q防止与其他应用冲突。如果数据量过200个数据页面(400kQ,那么pȝ会q行锁升U,锁会升成表U锁?   <br /> <br />   b)索引的用规范: <br /> <br />    i. 索引的创与应用结合考虑Q徏议大的OLTP表不要超q?个烦引?<br /> <br />    ii. 可能的使用索引字段作ؓ查询条gQ尤其是聚簇索引Q必要时可以通过index index_name来强制指定烦?<br /> <br />    iii. 避免对大表查询时q行table scanQ必要时考虑新徏索引?<br /> <br />    iv. 在用烦引字D作为条件时Q如果该索引是联合烦引,那么必须使用到该索引中的W一个字D作为条件时才能保证pȝ使用该烦引,否则该烦引将不会被用?<br /> <br />    v. 要注意烦引的l护Q周期性重建烦引,重新~译存储q程。   <br /> <br />   c)tempdb的用规范: <br /> <br />    i. 量避免使用distinct、order by、group by、having、join、cumputeQ因些语句会加重tempdb的负担?<br /> <br />    ii. 避免频繁创徏和删除时表Q减系l表资源的消耗?<br /> <br />    iii. 在新Z时表Ӟ如果一ơ性插入数据量很大Q那么可以用select into代替create tableQ避免logQ提高速度Q如果数据量不大Qؓ了缓和系l表的资源,先create tableQ然后insert?<br /> <br />    iv. 如果临时表的数据量较大,需要徏立烦引,那么应该创Z时表和徏立烦引的q程攑֜单独一个子存储q程中,q样才能保证pȝ能够很好的用到该时表的烦引?<br /> <br />     v. 如果使用C临时表,在存储过E的最后务必将所有的临时表显式删除,先truncate tableQ然后drop tableQ这样可以避免系l表的较长时间锁定?<br /> <br />     vi. 慎用大的临时表与其他大表的连接查询和修改Q减低系l表负担Q因U操作会在一条语句中多次使用tempdb的系l表。   <br /> <br />   d)合理的算法用:    <br /> <br />   Ҏ上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容,l合实际应用,采用多种法q行比较,以获得消耗资源最、效率最高的Ҏ。具体可用ASE调优命oQset statistics io on, set statistics time on , set showplan on {?<br /> <img src ="http://m.tkk7.com/WshmAndLily/aggbug/152251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/WshmAndLily/" target="_blank">semovy</a> 2007-10-12 10:29 <a href="http://m.tkk7.com/WshmAndLily/articles/152251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>技巧:SQL Server 2005Ҏv量数据处理的实现http://m.tkk7.com/WshmAndLily/articles/152248.htmlsemovysemovyFri, 12 Oct 2007 02:22:00 GMThttp://m.tkk7.com/WshmAndLily/articles/152248.htmlhttp://m.tkk7.com/WshmAndLily/comments/152248.htmlhttp://m.tkk7.com/WshmAndLily/articles/152248.html#Feedback0http://m.tkk7.com/WshmAndLily/comments/commentRss/152248.htmlhttp://m.tkk7.com/WshmAndLily/services/trackbacks/152248.html?/a>改分Q以及如何查看分?

  1 SQL Server 2005

  SQL Server 2005是微软在推出SQL Server 2000后时隔五q推出的一个数据库q_Q它的数据库引擎为关pd数据和结构化数据提供了更安全可靠?a title="存储相关资讯" target="_blank">存储功能Q用户可以构徏和管理用于业务的高可用和高性能的数据应用程序。此外SQL Server 2005l合了分析、报表、集成和通知功能。这使企业可以构建和部vl济有效的BI解决ҎQ帮助团队通过记分卡、Dashboard、Web Services和移动设备将数据应用推向业务的各个领域。无论是开发h员、数据库理员、信息工作者还是决{者,SQL Server 2005都可以提供出创新的解x案,q可从数据中获得更多的益处?/p>

  它所带来的新Ҏ,如T-SQL的增强、数据分区、服?a title="代理相关知识技? target="_blank">代理和与.Net Framework的集成等Q在易管理性、可用性、可伸羃性和安全性等斚w都有很大的增强?/p>

  2 表分区的具体实现Ҏ

  表分区分为水q_区和垂直分区。水q_区将表分为多个表。每个表包含的列数相同,但是行更。例如,可以一个包含十亿行的表水^分区?12 个表Q每个小表表C特定年份内一个月的数据。Q何需要特定月份数据的查询只需引用相应月䆾的表。而垂直分区则是将原始表分成多个只包含较少列的表。水q_区是最常用分区方式Q本文以水^分区来介l具体实现方法?/p>

  水^分区常用的方法是Ҏ时期和用对数据q行水^分区。例如本文例子,一个短信发送记录表包含最q一q的数据Q但是只定期讉K本季度的数据。在q种情况下,可考虑数据分成四个区Q每个区只包含一个季度的数据?/p>

  2.1 创徏文gl?/p>

  建立分区表先要创建文件组Q而创建多个文件组主要是ؓ了获得好?I/O q。一般情况下Q文件组数最好与分区数相同,q且q些文gl通常位于不同的磁盘上。每个文件组可以׃个或多个文g构成Q而每个分区必L到一个文件组。一个文件组可以由多个分Z用。ؓ了更好地理数据(例如Qؓ了获得更_的备份控?Q对分区表应q行设计Q以便只有相x据或逻辑分组的数据位于同一个文件组中。?ALTER DATABASEQ添加逻辑文gl名Q?/p>

  ALTER DATABASE [DeanDB] ADD FILEGROUP [FG1]

  DeanDB为数据库名称QFG1文gl名。创建文件组后,再?ALTER DATABASE 文件添加到该文件组中:

  ALTER DATABASE [DeanDB] ADD FILE ( NAME = N'FG1', FILENAME = N'C:DeanDataFG1.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) TO FILEGROUP [FG1]

  cM的徏立四个文件和文gl,q把每一个存储数据的文g攑֜不同的磁?a title="驱动下蝲" target="_blank">驱动器里?/p>

  2.2 创徏分区函数

  创徏分区表必d定分区的功能机Ӟ表进行分区的标准是通过分区函数来决定的。创建数据分区函数有RANGE “LEFT / RIGHT”两种选择。代表每个边界值在局部的哪一辏V例如存在四个分区,则定义三个边界点|q指定每个值是W一个分区的上边?(LEFT) q是W二个分区的下边?(RIGHT)[1]。代码如下:

  CREATE PARTITION FUNCTION [SendSMSPF](datetime) AS RANGE RIGHT FOR VALUES ('20070401', '20070701', '20071001')

  2.3 创徏分区Ҏ

  创徏分区函数后,必须其与分区方案相兌Q以便将分区指向至特定的文gl。就是定义实际存放数据的媒体与各数据块的对应关系。多个数据表可以q相同的数据分区函敎ͼ一般不q相同的数据分区方案。可以通过不同的分区方案,使用相同的分区函敎ͼ使不同的数据表有相同的分区条Ӟ但存攑֜不同的媒介上。创建分区方案的代码如下Q?/p>

  CREATE PARTITION SCHEME [SendSMSPS] AS PARTITION [SendSMSPF] TO ([FG1], [FG2], [FG3], [FG4])

  2.4 创徏分区?/p>

  建立好分区函数和分区Ҏ后,可以创建分了。分是通过定义分区键值和分区Ҏ相联pȝ。插入记录时QSQL SERVER会根据分区键值的不同Q通过分区函数的定义将数据攑ֈ相应的分区。从而把分区函数、分区方案和分区表三者有机的l合h。创建分的代码如下:

  CREATE TABLE SendSMSLog

  ([ID] [int] IDENTITY(1,1) NOT NULL,

  [IDNum] [nvarchar](50) NULL,

[SendContent] [text] NULL

 

  [SendDate] [datetime] NOT NULL,

  ) ON SendSMSPS(SendDate)

  2.5 查看分区表信?/p>

  pȝq行一D|间或者把以前的数据导入分后,我们需要查看数据的具体存储情况Q即每个分区存取的记录数Q那些记录存取在那个分区{。我们可以通过$partition.SendSMSPF来查看,代码如下Q?/p>

  SELECT $partition.SendSMSPF(o.SendDate)

  AS [Partition Number]

  , min(o.SendDate) AS [Min SendDate]

  , max(o.SendDate) AS [Max SendDate]

  , count(*) AS [Rows In Partition]

  FROM dbo.SendSMSLog AS o

  GROUP BY $partition.SendSMSPF(o.SendDate)

  ORDER BY [Partition Number]

  在查询分析器里执行以上脚本,l果如图1所C:

 

  ? 分区表信?/p>

  技巧:SQL Server 2005Ҏv量数据处理的实现

  2.6 l护分区

  分区的维护主要设计分区的d、减、合q和在分区间转换。可以通过ALTER PARTITION FUNCTION的选项SPLITQMERGE和ALTER TABLE的选项SWITCH来实现。SPLIT会多增加一个分区,而MEGRE会合q或者减分区,SWITCH则是逻辑地在l间转换分区?/p>

  3 性能Ҏ

  我们?650万数据,存储I间占用U?G的单表进行性能ҎQ测试环境ؓIBM365QCPU 臛_2.7G*2、内?16G、硬?136G*2Q系l^CؓWindows 2003 SP1+SQL Server 2005 SP1。测试结果如?Q?/p>

  ?Q分区和未分区性能Ҏ?单位Q毫U?

  试目 分区 未分?/p>

  1 16546 61466

  2 13 33

  3 20140 61546

  4 17140 61000

  说明Q?/p>

  1Q根据时间检索某一天记录所耗时?/p>

  2Q单条记录插入所耗时?/p>

  3Q根据时间删除某一天记录所耗时?/p>

  4Q统计每月的记录数所需旉

  从表1可以看出Q对分区表进行操作比未分区的表要快,q是因ؓ对分的操作采用了CPU和I/O的ƈ行操作,索数据的数据量也变小了,定位数据所耗时间变短?/p>

  4 l束?/strong>

  Ҏv量数据的处理一直是一个o人头痛的问题。分ȝ技术是所有设计者们首先考虑的问题,不管是分d用程序功能还是分L据访问,如果加以了合理规划,都能十分有效的解军_数据表的q行效率低和l护成本高等问题。SQL Server 2005新增的表分区功能Q可以对数据q行合理分区Q当用户在访问部分数据时QSQL Server最佛_引擎可以Ҏ数据的实体存放,扑և最佳的执行ҎQ而不至于大v捞针?/p>




semovy 2007-10-12 10:22 发表评论
]]>
sql l典语句http://m.tkk7.com/WshmAndLily/articles/152237.htmlsemovysemovyFri, 12 Oct 2007 01:58:00 GMThttp://m.tkk7.com/WshmAndLily/articles/152237.htmlhttp://m.tkk7.com/WshmAndLily/comments/152237.htmlhttp://m.tkk7.com/WshmAndLily/articles/152237.html#Feedback0http://m.tkk7.com/WshmAndLily/comments/commentRss/152237.htmlhttp://m.tkk7.com/WshmAndLily/services/trackbacks/152237.htmlSQL分类Q?
DDL—数据定义语a(CREATEQALTERQDROPQDECLARE)
DML—数据操U语a(SELECTQDELETEQUPDATEQINSERT)
DCL—数据控制语a(GRANTQREVOKEQCOMMITQROLLBACK)

首先,要介l基语句Q?br /> 1、说明:创徏数据?br /> CREATE DATABASE database-name
2、说明:删除数据?br /> drop database dbname
3、说明:备䆾sql server
--- 创徏 备䆾数据?device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开?备䆾
BACKUP DATABASE pubs TO testBack
4、说明:创徏新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
Ҏ已有的表创徏新表Q?
AQcreate table tab_new like tab_old (使用旧表创徏新表)
BQcreate table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后不能删除。DB2中列加上后数据类型也不能改变Q唯一能改变的是增加varcharcd的长度?br /> 7、说明:d主键Q?Alter table tabname add primary key(col)
说明Q删除主键: Alter table tabname drop primary key(col)
8、说明:创徏索引Qcreate [unique] index idxname on tabname(col….)
删除索引Qdrop index idxname
注:索引是不可更改的Q想更改必须删除重新建?br /> 9、说明:创徏视图Qcreate view viewname as select statement
删除视图Qdrop view viewname
10、说明:几个单的基本的sql语句
选择Qselect * from table1 where 范围
插入Qinsert into table1(field1,field2) values(value1,value2)
删除Qdelete from table1 where 范围
更新Qupdate table1 set field1=value1 where 范围
查找Qselect * from table1 where field1 like ’%value1%’ ---like的语法很_֦Q查资料!
排序Qselect * from table1 order by field1,field2 [desc]
LQselect count * as totalcount from table1
求和Qselect sum(field1) as sumvalue from table1
q_Qselect avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最:select min(field1) as minvalue from table1
11、说明:几个高查询q算?br /> AQ?UNION q算W?
UNION q算W通过l合其他两个l果表(例如 TABLE1 ?TABLE2Qƈ消去表中M重复行而派生出一个结果表。当 ALL ?UNION 一起用时Q即 UNION ALLQ,不消除重复行。两U情况下Q派生表的每一行不是来?TABLE1 是来自 TABLE2?
BQ?EXCEPT q算W?
EXCEPT q算W通过包括所有在 TABLE1 中但不在 TABLE2 中的行ƈ消除所有重复行而派生出一个结果表。当 ALL ?EXCEPT 一起用时 (EXCEPT ALL)Q不消除重复行?
CQ?INTERSECT q算W?br /> INTERSECT q算W通过只包?TABLE1 ?TABLE2 中都有的行ƈ消除所有重复行而派生出一个结果表。当 ALL ?INTERSECT 一起用时 (INTERSECT ALL)Q不消除重复行?
注:使用q算词的几个查询l果行必L一致的?
12、说明:使用外连?
A、left outer joinQ?
左外q接Q左q接Q:l果集几包括q接表的匚w行,也包括左q接表的所有行?
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
BQright outer join:
叛_q接(双?Q结果集既包括连接表的匹配连接行Q也包括双接表的所有行?
CQfull outer joinQ?
全外q接Q不仅包括符可接表的匹配行Q还包括两个q接表中的所有记录?/p>

其次Q大家来看一些不错的sql语句
1、说明:复制?只复制结?源表名:a 新表名:b) (Access可用)
法一Qselect * into b from a where 1<>1
法二Qselect top 0 * into b from a

2、说明:拯?拯数据,源表名:a 目标表名Qb) (Access可用)
insert into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拯(具体数据使用l对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据?#8217; where 条g
例子Q?.from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

 

4、说明:子查?表名1Qa 表名2Qb)
select a,b,c from a where a IN (select d from b ) 或? select a,b,c from a where a IN (1,2,3)

5、说明:昄文章、提交h和最后回复时?br /> select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查?表名1Qa 表名2Qb)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1Qa )
select * from (SELECT a,b,c FROM a) T where t.a > 1;

8、说明:between的用?between限制查询数据范围时包括了边界?not between不包?br /> select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数? and 数?

9、说明:in 的用方?br /> select * from table1 where a [not] in (‘?’,’?’,’?’,’?’)

10、说明:两张兌表,删除主表中已l在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、说明:四表联查问题Q?br /> select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、说明:日程安排提前五分钟提?
SQL: select * from 日程安排 where datediff('minute',f开始时?getdate())>5

13、说明:一条sql 语句搞定数据库分?br /> select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

14、说明:?0条记?br /> select top 10 * form table1 where 范围

15、说明:选择在每一lb值相同的数据中对应的a最大的记录的所有信?cMq样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成l排?{等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行ƈ消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数?br /> select top 10 * from tablename order by newid()

18、说明:随机选择记录
select newid()

19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'

21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')

22、说明:列示type、vender、pcs字段Q以type字段排列Qcase可以方便地实现多重选择Q类似select 中的case?br /> select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
昄l果Q?br /> type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3

23、说明:初始化表table1
TRUNCATE TABLE table1

24、说明:选择?0?5的记?br /> select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
  
随机选择数据库记录的ҎQ用Randomize函数Q通过SQL语句实现Q?br />   ?a title="存储相关资讯" target="_blank">存储在数据库中的数据来说Q随机数Ҏ能l出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机?#8221;然后打印出来。实际上常见的解x案是建立如下所C的循环Q?

Randomize
RNumber = Int(Rnd*499) +1
 
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... q里是执行脚?...
end if
objRec.MoveNext
Wend
 
  q很Ҏ理解。首先,你取??00范围之内的一个随机数Q假?00是数据库内记录的LQ。然后,你遍历每一记录来测试ID 的倹{检查其是否匚wRNumber。满x件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber {于495Q那么要循环一遍数据库q旉可就长了。虽?00q个数字看v来大了些Q但相比更ؓE_的企业解x案这q是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不死定了Q?
  采用SQLQ你可以很快地扑և准确的记录ƈ且打开一个只包含该记录的recordsetQ如下所C:
Randomize
RNumber = Int(Rnd*499) + 1
 
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
 
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
 
  不必写出RNumber 和IDQ你只需要检查匹配情况即可。只要你对以上代码的工作满意Q你自可按需操作“随机”记录。Recordset没有包含其他内容Q因此你很快p扑ֈ你需要的记录q样大大降低了处理旉?
再谈随机?
  现在你下定决心要榨干Random 函数的最后一滴aQ那么你可能会一ơ取出多条随录或者想采用一定随围内的记录。把上面的标准Random CZ扩展一下就可以用SQL应对上面两种情况了?
  Z取出几条随机选择的记录ƈ存放在同一recordset内,你可以存储三个随机数Q然后查询数据库获得匚wq些数字的记录:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
 
  假如你想选出10条记录(也许是每ơ页面装载时?0条链接的列表Q,你可以用BETWEEN 或者数学等式选出W一条记录和适当数量的递增记录。这一操作可以通过好几U方式来完成Q但?SELECT 语句只显CZU可能(q里的ID 是自动生成的LQ:
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

 

  注意Q以上代码的执行目的不是查数据库内是否有9条ƈ发记录?/p>

 
随机d若干条记录,试q?br /> Access语法QSELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysqlelect * From 表名 Order By rand() Limit n
Access左连接语?最q开发要用左q接,Access帮助什么都没有,|上没有Access的SQL说明,只有自己试, 现在C以备后查)
语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
使用SQL语句 ?..代替q长的字W串昄
语法Q?br /> SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
 
Conn.Execute说明
ExecuteҎ
  该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集Q该Ҏ的用格式分Z下两U:
    1Q执行SQL查询语句Ӟ返回查询得到的记录集。用法ؓQ?br />     Set 对象变量?q接对象.Execute("SQL 查询语言")
   ExecuteҎ调用后,会自动创录集对象Qƈ查询结果存储在该记录对象中Q通过SetҎQ将记录集赋l指定的对象保存Q以后对象变量就代表了该记录集对象?/p>

    2Q执行SQL的操作性语aӞ没有记录集的q回。此时用法ؓQ?br />     q接对象.Execute "SQL 操作性语? [, RecordAffected][, Option]
      ·RecordAffected 为可选项Q此出可攄一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过讉K该变量,可知道SQL语句队多条记录q行了操作?br />       ·Option 可选项Q该参数的取值通常为adCMDTextQ它用于告诉ADOQ应该将ExecuteҎ之后的第一个字W解释ؓ命o文本。通过指定该参敎ͼ可执行更高效?/p>

·BeginTrans、RollbackTrans、CommitTransҎ
  q三个方法是q接对象提供的用于事务处理的Ҏ。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务QCommitTrans用于提交所有的事务处理l果Q即认事务的处理?br />   事务处理可以一l操作视Z个整体,只有全部语句?a title="成功技? target="_blank">成功执行后,事务处理才算成功Q若其中有一个语句执行失败,则整个处理就失败,q恢复到处里前的状态?br />   BeginTrans和CommitTrans用于标记事务的开始和l束Q在q两个之间的语句Q就是作Z务处理的语句?br />

判断事务处理是否成功Q可通过q接对象的Error集合来实玎ͼ若Error集合的成员个C?Q则说明有错误发生,事务处理p|。Error集合中的每一个Error对象Q代表一个错误信息?br />








================

明:复制?只复制结?源表名:a 新表名:b)
SQL: select * into b from a where 1<>1

说明Q拷贝表(拯数据,源表名:a 目标表名Qb)
SQL: insert into b(a, b, c) select d,e,f from b;

说明Q显C文章、提交h和最后回复时?br /> SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

说明Q外q接查询(表名1Qa 表名2Qb)
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

说明Q日E安排提前五分钟提醒
SQL:  select * from 日程安排 where datediff('minute',f开始时?getdate())>5


说明Q两张关联表Q删除主表中已经在副表中没有的信?br /> SQL:  
delete from info where not exists ( select * from infobz where info.infid=infobz.infid ) 

说明Q?-
SQL:  
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
  FROM TABLE1, 
    (SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
        FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
                FROM TABLE2
              WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X, 
            (SELECT NUM, UPD_DATE, STOCK_ONHAND
                FROM TABLE2
              WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = 
                    TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') &brvbar;&brvbar; '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y, 
        WHERE X.NUM = Y.NUM Q?Q?br />           AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
WHERE A.NUM = B.NUM

说明Q?-
SQL:  
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and pdU?'"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源?高考Ll?br />
说明Q?br /> 从数据库中去一q的各单位电话费l计(电话费定额贺电化肥清单两个表来源Q?br /> SQL: 
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
        FROM TELFEESTAND a, TELFEE b
        WHERE a.tel = b.telfax) a
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')

说明Q四表联查问题:
SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c  inner join d on a.a=d.d where .....

说明Q得到表中最的未用的ID?br /> SQL:
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID
 FROM  Handle
 WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)



semovy 2007-10-12 09:58 发表评论
]]>
SQL server2005常用的函数和分页的几个解x?/title><link>http://m.tkk7.com/WshmAndLily/articles/143426.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Fri, 07 Sep 2007 07:27:00 GMT</pubDate><guid>http://m.tkk7.com/WshmAndLily/articles/143426.html</guid><wfw:comment>http://m.tkk7.com/WshmAndLily/comments/143426.html</wfw:comment><comments>http://m.tkk7.com/WshmAndLily/articles/143426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/WshmAndLily/comments/commentRss/143426.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/WshmAndLily/services/trackbacks/143426.html</trackback:ping><description><![CDATA[<p>SQL server2005常用的函数和分页的几个解x案:</p> <p>使用旉和日期的函数<br /> getdate():获取pȝ当前旉<br /> dateadd(datepart,number,date):计算在一个时间的基础上增加一个时间后的新旉?比如Qdateadd(yy,30,getdate())<br /> datediff(datepart,startdate,enddate):计算两个旉的差?比如Qdatediff(yy,getdate(),'2008-08-08')<br /> dataname(datepart,date):获取旉不同部分的|q回gؓ字符?br /> datepart(datepart,date):和datename怼Q只是返回gؓ整型<br /> day(date):获取指定旉的天?br /> month(date):获取指定旉的月?br /> year(date):获取指定旉的年?/p> <p>问题1:<br /> 表A是一个不断有新记录增加的表,字段t是记录的插入时?现在想知道每10U钟插入到该表的<br /> 记录L大于N条的旉和记录条敎ͼq按由大到小的顺序排序,请写出完成该功能的SQL语句?br /> 解决ҎQ?br /> declare @t datetime<br /> select @t=min(t) from B<br /> select max(t) as maxT,min(t) as minT,count(*) as Num from B group by <br /> datediff(ss,@t,t)/10 having count(*)>1 order by count(*) desc</p> <p>全局变量Q?br /> 以@@开_且不能由用户自定义,下面来看几个常用的全局变量Q?br /> @@rowcount Q表C最q一个语句媄响的行数?br /> @@error:上一条sql语句q回的错误信息?br /> @@identity:Ҏ标识列的表而言Q系l会每生成一个新的标识号Q这个变量记录的是最q生的id?/p> <p>rowcount:会话U全局变量,比如set rowcount 3 ,是讄q回的记录数最多是3条,此变量的作用cM?br /> top子句QTOP 子句适用于指定了该子句的单个 SELECT 语句。SET ROWCOUNT 一直有效,直到执行另一?<br /> SET ROWCOUNT 语句Q例?SET ROWCOUNT 0 关闭该选项?/p> <p>indetity_insertQ会话全局变量<br /> M时候,一个会话中只有一个表?IDENTITY_INSERT 属性可以设|ؓ ON。如果某个表已将此属性设<br /> |ؓ ONQ则对另一个表发出 SET IDENTITY_INSERT ON 语句ӞSQL Server 2005 返回一个错误信息,<br /> 指出 SET IDENTITY_INSERT 已设|ؓ ONQƈ报告已将其属性设|ؓ ON 的表?br /> 如果插入值大于表的当前标识|?SQL Server 自动新插入g为当前标识g用?br /> SET IDENTITY_INSERT 的设|是在执行或q行时设|的Q而不是在分析时设|的?br /> dbcc checkident (table_name,reseed,n)Q此语句的功能是更正列的当前标识|把table_name的标<br /> 识符讄为n。如果当标识列中存在 PRIMARY KEY ?UNIQUE U束Ӟ无效标识信息会导致错误消?2627?/p> <p>SQL Server的几个分解x案:<br /> 解决Ҏ1Q?br /> declare @pageIndex int,@pageSize int,@recordNum int<br /> set @pageIndex=3<br /> set @pageSize=3<br /> select top(@pageSize) * from Grade where id not in (select top <br /> ((@pageIndex-1)*@pageSize) id from Grade)//昄出第 7 ?W?9 ?/p> <p>select @recordNum=count(*) from Grade//昄总记录数</p> <p>点评Q效率不高,而且取出来的数据是按id排序的。如果想按其他字D|序就不行?/p> <p>解决Ҏ二:<br /> declare @id int<br /> --set rowcount 3<br /> --select @id=id from Grade<br /> select top 3 @id=id from Grade//q句{效于上面注视的两句<br /> select top 3 * form Grade where id>@id//查询出第 4 到第 6 条记?/p> <p>点评Q效率比Ҏ一E高Q但是取出来的数据是也按id排序的。如果想按其他字D|序就不行</p> <p>解决Ҏ三:<br /> create table #table(new_id int identity(1,1) primary key,id int)<br /> insert into #table(id) select id from grade<br /> select a.* from grade a join #table b   on (b.new_id between 6 and 9) and a.id=b.id<br /> //取出W?6 到第 9 条,<br /> 点评Q其原理是把要分늚表的主键插入C时表中,临时表的字段是一个标识列和要?br /> 늚表的主键列(包括是多个主键的情况Q上面的两种Ҏ׃行)。特Ҏ效率高,取出<br /> 来的数据能根据自p求的字段排序?/p> <p>临时表:<br /> 上面的解x案三是使用了时表Q它与永久表怼Q但临时表存储在 tempdb 中,当不<br /> 再用时会自动删除?br /> 临时表有两种cdQ本地和全局。它们在名称、可见性以及可用性上有区别。本C时表<br /> 的名UC单个数字W号 (#) 打头Q它们仅对当前的用户q接是可见的Q当用户?SQL Server<br /> 实例断开q接时被删除。全局临时表的名称以两个数字符?(##) 打头Q创建后对Q何用?br /> 都是可见的,当所有引用该表的用户?SQL Server 断开q接时被删除?/p> <p>表变量Q?br /> 象上面分늚例子也可以用表U变量,象下面这P</p> <p>declare @table table (newid int identiey(1,1),id int)<br /> insert into @table(id) select id from grade<br /> select a.* from grade a join @table b   on (b.new_id between 6 and 9) and a.id=b.id<br /> q种方式比用时表分页效率更高?/p> <p>字符串函敎ͼ<br /> left(stringExp,intExp):取字W串左边多少个字W?br /> len(strExp):计算指定字符串的长度<br /> char(intExp):Ҏ指定字符的ASCII码返回相应的字符<br /> ascii(strExp)Q将一个字W{换成相应的ascii?br /> lower(strExp):字W串转换为小?br /> Upper(strExp):字W串转换为大?br /> Ltrim(strExp):dW串左边的空?br /> rtrim(strExp):dW串双的空?br /> substring(strExp,intExp,intExp):按指定的索引截取一个字W串的子字符?br /> replace(strExp,strOldStr,strNewStr):字W串中的部分内容用新的字W串来代?/p> <p><br /> pȝ其他转换函数:<br /> isnull(逻辑表达?代替?:判断逻辑表达式是否ؓnullQ是的话q指定的gѝ?br /> convert()和castQ?br /> CAST 函数?CONVERT 函数q可用于获取各种Ҏ数据格式Qƈ可用于选择列表、WHERE <br /> 子句以及允许使用表达式的M位置中。如果希?Transact-SQL E序代码W合 SQL-92Q?br /> 请?CAST 而不要?CONVERT。如果要利用 CONVERT 中的功能Q请使用 CONVERT <br /> 而不要?CAST?br /> 使用 CAST ?CONVERT Ӟ需要提供以下信息: <br /> 要{换的表达式;例如Q销售报表要求销售数据从货币数据转换为字W数据?br /> 要将指定的表辑ּ转换为的数据cdQ例?varchar 或其?SQL Server pȝ数据cd?br /> 除非被转换的值存储v来,否则转换仅在 CAST 函数?CONVERT 函数的作用时间范围内有效?br /> 如果转换时没有指定数据类型的长度Q则 SQL Server 自动?30 作ؓ长度倹{?/p> <p>问题Q?br /> 有一张商品表Q里面三个字D:购买日期Q购ChQh根{现在要l计每个购买人每一<br /> 季度的消ҎMhQƈ出计Q也是q一q消费的MhQ?/p> <p>解决ҎQ?/p> <p>创徏一张shop表:<br /> create table shop<br /> (<br /> selldate datetime default(getdate()),<br /> name varchar(20),<br /> price money,<br /> )<br /> 加入一些测试数据:<br /> insert into shop(selldate,name,price) values('2006-05-12','张三',75)<br /> insert into shop(selldate,name,price) values('2006-07-12','张三',50)<br /> insert into shop(selldate,name,price) values('2006-09-12','张三',43)<br /> insert into shop(selldate,name,price) values('2006-11-12','李四',67)<br /> insert into shop(selldate,name,price) values('2006-01-12','李四',98)<br /> insert into shop(selldate,name,price) values('2006-06-12','李四',100)<br /> insert into shop(selldate,name,price) values('2006-08-12','王五',134)<br /> insert into shop(selldate,name,price) values('2006-04-12','王五',165)<br /> insert into shop(selldate,name,price) values('2006-10-12','王五',85)<br /> insert into shop(selldate,name,price) values('2006-08-12','赵六',11)<br /> insert into shop(selldate,name,price) values('2006-12-12','赵六',165)<br /> insert into shop(selldate,name,price) values('2006-02-12','赵六',17)<br /> insert into shop(selldate,name,price) values('2006-01-12','赵六',198)</p> <p>select * from shop</p> <p>解决问题的select语句Q?br /> select name 姓名,<br /> sum(case when datepart(q,selldate)=1 then price else 0 end) W一季度,<br /> sum(case when datepart(q,selldate)=2 then price else 0 end) W二季度,<br /> sum(case when datepart(q,selldate)=3 then price else 0 end) W三季度,<br /> sum(case when datepart(q,selldate)=4 then price else 0 end) W四季度,<br /> sum(price) 计<br /> from shop   group by name </p> <img src ="http://m.tkk7.com/WshmAndLily/aggbug/143426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/WshmAndLily/" target="_blank">semovy</a> 2007-09-07 15:27 <a href="http://m.tkk7.com/WshmAndLily/articles/143426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>_֦sql语句http://m.tkk7.com/WshmAndLily/articles/143424.htmlsemovysemovyFri, 07 Sep 2007 07:25:00 GMThttp://m.tkk7.com/WshmAndLily/articles/143424.htmlhttp://m.tkk7.com/WshmAndLily/comments/143424.htmlhttp://m.tkk7.com/WshmAndLily/articles/143424.html#Feedback0http://m.tkk7.com/WshmAndLily/comments/commentRss/143424.htmlhttp://m.tkk7.com/WshmAndLily/services/trackbacks/143424.html下列语句部分?span>Mssql语句Q不可以在access中用?/span>
SQL分类Q?
DDL—数据定义语a(CREATEQALTERQDROPQDECLARE)
DML—数据操U语a(SELECTQDELETEQUPDATEQINSERT)
DCL—数据控制语a(GRANTQREVOKEQCOMMITQROLLBACK)
首先,要介l基语句Q?/span>
1、说明:创徏数据?/div>
CREATE DATABASE database-name
2、说明:删除数据?/div>
drop database dbname
3、说明:备䆾sql server
--- 创徏 备䆾数据?span> device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开?备䆾
BACKUP DATABASE pubs TO testBack
4、说明:创徏新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
Ҏ已有的表创徏新表Q?
AQ?span>create table tab_new like tab_old (使用旧表创徏新表)
BQ?span>create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后不能删除?span>DB2中列加上后数据类型也不能改变Q唯一能改变的是增加varcharcd的长度?/span>
7、说明:d主键Q?span> Alter table tabname add primary key(col)
说明Q删除主键: Alter table tabname drop primary key(col)
8、说明:创徏索引Q?span>create [unique] index idxname on tabname(col….)
删除索引Q?span>drop index idxname
注:索引是不可更改的Q想更改必须删除重新建?/div>
9、说明:创徏视图Q?span>create view viewname as select statement
删除视图Q?span>drop view viewname
10、说明:几个单的基本?span>sql语句
选择Q?span>select * from table1 where 范围
插入Q?span>insert into table1(field1,field2) values(value1,value2)
删除Q?span>delete from table1 where 范围
更新Q?span>update table1 set field1=value1 where 范围
查找Q?span>select * from table1 where field1 like ’%value1%’ ---like的语法很_֦Q查资料!
排序Q?span>select * from table1 order by field1,field2 [desc]
LQ?span>select count * as totalcount from table1
求和Q?span>select sum(field1) as sumvalue from table1
q_Q?span>select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最:select min(field1) as minvalue from table1
11、说明:几个高查询q算?/div>
AQ?span> UNION q算W?
UNION q算W通过l合其他两个l果表(例如 TABLE1 ?TABLE2Qƈ消去表中M重复行而派生出一个结果表。当 ALL ?UNION 一起用时Q即 UNION ALLQ,不消除重复行。两U情况下Q派生表的每一行不是来?TABLE1 是来自 TABLE2?
BQ?span> EXCEPT q算W?
EXCEPT q算W通过包括所有在 TABLE1 中但不在 TABLE2 中的行ƈ消除所有重复行而派生出一个结果表。当 ALL ?EXCEPT 一起用时 (EXCEPT ALL)Q不消除重复行?
CQ?span> INTERSECT q算W?/span>
INTERSECT q算W通过只包?span> TABLE1 ?TABLE2 中都有的行ƈ消除所有重复行而派生出一个结果表。当 ALL ?INTERSECT 一起用时 (INTERSECT ALL)Q不消除重复行?
注:使用q算词的几个查询l果行必L一致的?
12、说明:使用外连?
A?span>left outer joinQ?
左外q接Q左q接Q:l果集几包括q接表的匚w行,也包括左q接表的所有行?
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
BQ?span>right outer join:
叛_q接(双?Q结果集既包括连接表的匹配连接行Q也包括双接表的所有行?
CQ?span>full outer joinQ?
全外q接Q不仅包括符可接表的匹配行Q还包括两个q接表中的所有记录?/div>
其次Q大家来看一些不错的sql语句
1、说明:复制?span>(只复制结?源表名:a 新表名:b) (Access可用)
法一Q?span>select * into b from a where 1<>1
法二Q?span>select top 0 * into b from a
2、说明:拯?span>(拯数据,源表名:a 目标表名Qb) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拯(具体数据使用l对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据?#8217; where 条g
例子Q?span>..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、说明:子查?span>(表名1Qa 表名2Qb)
select a,b,c from a where a IN (select d from b ) 或?span>: select a,b,c from a where a IN (1,2,3)
5、说明:昄文章、提交h和最后回复时?/div>
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查?span>(表名1Qa 表名2Qb)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:在线视图查询(表名1Qa )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用?between限制查询数据范围时包括了边界?not between不包?/span>
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数?span>1 and 数?
9、说明:in 的用方?/span>
select * from table1 where a [not] in (‘?span>1’,’?’,’?’,’?’)
10、说明:两张兌表,删除主表中已l在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:四表联查问题Q?/div>
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提?/div>
SQL: select * from 日程安排 where datediff('minute',f开始时?getdate())>5
13、说明:一?span>sql 语句搞定数据库分?/span>
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
14、说明:?span>10条记?/span>
select top 10 * form table1 where 范围
15、说明:选择在每一l?span>b值相同的数据中对应的a最大的记录的所有信?cMq样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成l排?{等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行ƈ消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、说明:随机取出10条数?/span>
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、说明:列示type、vender、pcs字段Q以type字段排列Qcase可以方便地实现多重选择Q类似select 中的case?/span>
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
昄l果Q?/div>
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择?span>10?5的记?/span>
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
  
随机选择数据库记录的ҎQ?span>Randomize函数Q通过SQL语句实现Q?/span>
  对存储在数据库中的数据来_随机数特性能l出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机?#8221;然后打印出来。实际上常见的解x案是建立如下所C的循环Q?
Randomize
RNumber = Int(Rnd*499) +1
 
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... q里是执行脚?span> ...
end if
objRec.MoveNext
Wend
 
  q很Ҏ理解。首先,你取?span>1?00范围之内的一个随机数Q假?00是数据库内记录的LQ。然后,你遍历每一记录来测试ID 的倹{检查其是否匚wRNumber。满x件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber {于495Q那么要循环一遍数据库q旉可就长了。虽?00q个数字看v来大了些Q但相比更ؓE_的企业解x案这q是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不死定了Q?
  采用SQLQ你可以很快地扑և准确的记录ƈ且打开一个只包含该记录的recordsetQ如下所C:
Randomize
RNumber = Int(Rnd*499) + 1
 
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
 
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
 
  不必写出RNumber 和IDQ你只需要检查匹配情况即可。只要你对以上代码的工作满意Q你自可按需操作“随机”记录。Recordset没有包含其他内容Q因此你很快p扑ֈ你需要的记录q样大大降低了处理旉?
再谈随机?/div>
  现在你下定决心要榨干Random 函数的最后一滴aQ那么你可能会一ơ取出多条随录或者想采用一定随围内的记录。把上面的标准Random CZ扩展一下就可以用SQL应对上面两种情况了?
  Z取出几条随机选择的记录ƈ存放在同一recordset内,你可以存储三个随机数Q然后查询数据库获得匚wq些数字的记录:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
 
  假如你想选出10条记录(也许是每ơ页面装载时?0条链接的列表Q,你可以用BETWEEN 或者数学等式选出W一条记录和适当数量的递增记录。这一操作可以通过好几U方式来完成Q但?SELECT 语句只显CZU可能(q里的ID 是自动生成的LQ:
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"
  注意Q以上代码的执行目的不是查数据库内是否有9条ƈ发记录?/span>
 
随机d若干条记录,试q?/div>
Access语法Q?span>SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysqlelect * From 表名 Order By rand() Limit n
Access左连接语?span>(最q开发要用左q接,Access帮助什么都没有,|上没有Access的SQL说明,只有自己试, 现在C以备后查)
语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
使用SQL语句 ?..代替q长的字W串昄
语法Q?/div>
SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
 
Conn.Execute说明
ExecuteҎ
  该方法用于执?span>SQL语句。根据SQL语句执行后是否返回记录集Q该Ҏ的用格式分Z下两U:
    1Q执行SQL查询语句Ӟ返回查询得到的记录集。用法ؓQ?/span>
    Set 对象变量?q接对象.Execute("SQL 查询语言")
   ExecuteҎ调用后,会自动创录集对象Qƈ查询结果存储在该记录对象中Q通过SetҎQ将记录集赋l指定的对象保存Q以后对象变量就代表了该记录集对象?/span>
    2Q执行SQL的操作性语aӞ没有记录集的q回。此时用法ؓQ?/span>
    q接对象.Execute "SQL 操作性语? [, RecordAffected][, Option]
      ·RecordAffected 为可选项Q此出可攄一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过讉K该变量,可知道SQL语句队多条记录q行了操作?/span>
      ·Option 可选项Q该参数的取值通常为adCMDTextQ它用于告诉ADOQ应该将ExecuteҎ之后的第一个字W解释ؓ命o文本。通过指定该参敎ͼ可执行更高效?/span>
·BeginTrans、RollbackTrans、CommitTransҎ
  q三个方法是q接对象提供的用于事务处理的Ҏ?span>BeginTrans用于开始一个事物;RollbackTrans用于回滚事务QCommitTrans用于提交所有的事务处理l果Q即认事务的处理?/span>
  事务处理可以一l操作视Z个整体,只有全部语句都成功执行后Q事务处理才成功;若其中有一个语句执行失败,则整个处理就失败,q恢复到处里前的状态?/div>
  BeginTrans和CommitTrans用于标记事务的开始和l束Q在q两个之间的语句Q就是作Z务处理的语句。判断事务处理是否成功,可通过q接对象的Error集合来实玎ͼ若Error集合的成员个C?Q则说明有错误发生,事务处理p|。Error集合中的每一个Error对象Q代表一个错误信息?/span>


semovy 2007-09-07 15:25 发表评论
]]>collate chinese_prc_ci_as http://m.tkk7.com/WshmAndLily/articles/134370.htmlsemovysemovySat, 04 Aug 2007 00:59:00 GMThttp://m.tkk7.com/WshmAndLily/articles/134370.htmlhttp://m.tkk7.com/WshmAndLily/comments/134370.htmlhttp://m.tkk7.com/WshmAndLily/articles/134370.html#Feedback0http://m.tkk7.com/WshmAndLily/comments/commentRss/134370.htmlhttp://m.tkk7.com/WshmAndLily/services/trackbacks/134370.html我们?/font>create table时经怼到q样的语句,例如Q?/font>CityName nvarchar(10)collate chinese_prc_ci_as nullQ那它到底是什么意思呢Q不妨看看下面:

首先Q?/font>collate是一个子句,可应用于数据库定义或列定义以定义排序规则Q或应用于字W串表达式以应用排序规则投媄?/span>

语法?/font>collate collation_name

collation_name Q:={windows_collation_name}|{sql_collation_name}

参数collate_name是应用于表达式、列定义或数据库定义的排序规则的名称?/font>collation_name 可以只是指定?/font> Windows_collation_name ?/font> SQL_collation_name?/span>

Windows_collation_name ?/font> Windows 排序规则的排序规则名U。参?/font> Windows 排序规则名称?/font>
SQL_collation_name
?/font> SQL 排序规则的排序规则名U。参?/font> SQL 排序规则名称?/font> 

下面单介l一?/font>排序规则Q?/span>

什么叫排序规则呢?MS是这hq的Q?/font>"?/font> Microsoft SQL Server 2000 中,
字符串的物理存储由排序规则控制。排序规则指定表C每个字W的位模式以及存
储和比较字符所使用的规则?/font>"
  在查询分析器内执行下面语句,可以得到SQL SERVER支持的所有排序规则?/span>

    select * from ::fn_helpcollations()

排序规则名称׃部䆾构成Q前半部份是指本排序规则所支持的字W集?/font>
如:
  Chinese_PRC_CS_AI_WS
前半部䆾Q指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则?/font>
排序规则的后半部份即后缀 含义Q?/font>
  _BIN 二进制排?/font>
  _CI(CS) 是否区分大小写,CI不区分,CS区分
  _AI(AS) 是否区分重音Q?/font>AI不区分,AS区分   
  _KI(KS) 是否区分假名cd,KI不区分,KS区分 
    _WI(WS)
是否区分宽度 WI不区分,WS区分 

区分大小?/font>:如果惌比较大写字母和写字母视ؓ不等Q请选择该选项?/font>
区分重音:如果惌比较重韛_非重韛_母视Z{,请选择该选项。如果选择该选项Q?/font>
        
比较q将重音不同的字母视Z{?/font>
区分假名:如果惌比较片假名和^假名日语韌视ؓ不等Q请选择该选项?/font>
区分宽度:如果惌比较半角字W和全角字符视ؓ不等Q请选择该选项



semovy 2007-08-04 08:59 发表评论
]]>
վ֩ģ壺 Ļ߲| AV˳ۺ| ëƬ߿ò | VƬ߲| Ů߲ͬ| ޹ŮaaaëƬ| ɫ͵͵ۺAVYP| aëƬ18ϹۿƷ| ŷ˳ɾƷѹۿ| Ƶַѹۿ| һƵѹۿ| jiz zz| һƵ| һۺϾþ| AVרƬ߹ۿ| ޸ƷӰ߹ۿ| ŮڵƵ | Ļ˳޵Ӱ| ԲaëƬ| ɫƵվ| Ƶ| þþƷרѶ| baoyu116.Ƶ| 91Ƶ| ѽƵ| һĻר| Ůվѹۿ| ޱ̬һ| AV߹ۿ| 2020ˬ| avƬþ| jjzzjjzz߹ۿ| պĻò| ˳վձƬ| 99999þþþþ| ĻAV| ɫĻ߲| ޹ҹӰ| Ʒ޾Ʒ| ѹۿƵ| AVһδ|