数据库SQL查询语句大全

上传人:w****2 文档编号:50857665 上传时间:2022-01-22 格式:DOC 页数:43 大小:254KB
返回 下载 相关 举报
数据库SQL查询语句大全_第1页
第1页 / 共43页
数据库SQL查询语句大全_第2页
第2页 / 共43页
数据库SQL查询语句大全_第3页
第3页 / 共43页
点击查看更多>>
资源描述
经典SQL查询语句大全、基础1、说明:创建数据库CREATE DATABASE database-n ame2、说明:删除数据库drop database dbn ame3、说明:备份sql server-创建备份数据的deviceUSE masterEXEC sp_addumpdevice disk, testBack, c:mssql7backupMyNwi nd_1.dat-开始备份BACKUP DATABASE pubs TO testBack4、说明:创建新表create table tab name(col1 type1 not n ull primary key,col2 type2not null,. )根据已有的表创建新表:A: create table tab_new like tab_old (使用旧表创建新表)B: create table tab_new as select col1,col2, from tab_old definitionon ly5、说明:删除新表drop table tab name6说明:增加一个列Alter table tab name add colu mn col type注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的 是增加varchar类型的长度。7、 说明:添加主键 : Alter table tab name add primary key(col)说明:删除主键 : Alter table tab name drop primary key(col)8、 说明:创建索弓丨:create unique index idxname on tabname(col,.)删除索引:drop index idxname注:索引是不可更改的,想更改必须删除重新建。9、说明:创建视图 :create view view name as select stateme nt删除视图:drop view view name10、说明:几个简单的基本的sql语句选择:select * from tablei where 范围插入:insert into table1(field1,field2) values(value1,value2)删除:delete from tablei where 范围更新:update tablei set field仁valuel where范围查找:select * from tablei where fieldi like %value1% -like 的语法很精妙,查资料!排序:select * from tablel order by field1,field2 desc 总数:select count (fieldl)as totalcount from tablel求和:select sum(fieldl) as sumvalue from tablel 平均:select avg(fieldl) as avgvalue from tablel 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table111、说明:几个高级查询运算词A: UNION运算符UNION运算符通过组合其他两个结果表(例如TABLE1和TABLE2)并消去表中任何重复行而派生出一个结果表。当ALL随UNION 一起使用时(即UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1就是来自 TABLE2B: EXCEPT运算符EXCEPT运算符通过包括所有在TABLE1中但不在TABLE2中的行并消除所有重 复行而派生出一个结果表。当ALL随EXCEPT一起使用时(EXCEPT ALL),不消 除重复行。C: INTERSECT 运算符INTERSECT运算符通过只包括TABLE1和TABLE2中都有的行并消除所有重复 行而派生出一个结果表。当 ALL随INTERSECT起使用时(INTERSECT ALL), 不消除重复行。注:使用运算词的几个查询结果行必须是一致的。12、说明:使用外连接A、left ( outer) join :左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.cB: right ( outer) join:右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。C: full/cross( outer) join全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。12、分组:Group by:一张表,一旦分组 完成后,查询后只能得到组相关的信息。组相关的信息:(统计信息)count,sum,max,min,avg分组的标准)在SQLServer中分组时:不能以text , ntext , image类型的字段作为分组依 据在selecte统计函数中的字段,不能和 普通的字段放在一起;13、对数据库进行操作:分离数据库:sp_detach_db;附加数据库:sp_attach_db后接表明,附加 需要完整的路径名14、如何修改数据库的名称:sp_re namedb old_ name, new_n ame、提升1、 说明:复制表(只复制结构,源表名:a新表名:b) (Access可用) 法一:select * into b from a where 11(仅用于 SQIServer) 法二:select top 0 * into b from a2、说明:拷贝表(拷贝数据,源表名:a目标表名:b) (Access可用)in sert into b(a, b, c) select d,e,f from b;3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径)(Access可用)insert into b(a, b, c) select d,e,f from b in具体数据库where 条件例子:.from b inServer.MapPath(.)&data.mdb & where.4、说明:子查询(表名1: a表名2: b)select a,b,c from a where a IN (select d from b )或者:select a,b,cfrom a where a IN (1,2,3)5、说明:显示文章、提交人和最后回复时间select a.title,a.user name,b.adddate from table a,(select max(adddate)adddate from table where table.title=a.title) b6说明:外连接查询(表名1: a表名2: b)select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c7、说明:在线视图查询(表名1: a )select * from (SELECT a,b,c FROM a) T where t.a 1;8、说明:between的用法,between限制查询数据范围时包括了边界值,not bet wee n不包括select * from table1 where time between time1 and time2select a,b,c, from table1 where a not between数值 1 and 数值 29、说明:in的使用方法select * from table1 where a not in (值 1,值 2,值 4,值 6,)10、说明:两张关联表,删除主表中已经在副表中没有的信息delete from table1 where not exists ( select * from table2 where tabl e1.field1=table2.field1 )11、说明:四表联查问题:select * from a left inner join b on a.a=b.b right inn er jo in c on a. a=c.c inner join d on a.a=d.d where. 12、说明:日程安排提前五分钟提醒SQL: select * from 日程安排 where datediff(minute,f 开始时间,getdat e()5 13、说明:一条sql语句搞定数据库分页select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序 字段 desc) a表名 b where b主键字段 =a.主键字段 order by a排序字段 具体实现:关于数据库分页:declare start in t,e nd intsql n varchar(600)setsql= select top +str (end-start+1)+ +from T where rid notin (select top +str (str-1)+ Rid from T where Rid-1)exec sp_executesql sql注意:在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊 的处理。Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处 的。因为这样可以避免top的字段如果是逻辑索引的,查询的结果后实际表中 的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在 索引则首先查询索引)14、说明:前10条记录select top 10 * form table1 where范围15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类 似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名, 等等.)select a,b,c from table name ta where a=(select max(a) from table name tb where tb.b=ta.b) 16、说明:包括所有在 TableA中但不在TableB和TableC中的行并消除所有 重复行而派生出一个结果表(select a from tableA ) except (select a from tableB) except (selecta from tableC)17、说明:随机取出10条数据select top 10 * from table name order by n ewid()18、说明:随机选择记录19、说明:删除重复记录1) , delete from table name where id not in (select max(id) from table na me group by col1,col2,.)2) ,select dist inct * into temp fromtable namedelete from table namein sert intotable name select * from temp评价:这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作3) ,例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但 很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字 段,怎样删除重复字段alter tabletable name-添加一个自增列add colu mn_b int ide ntity(1,1)delete from table name where colu mn_b not in(select max(column_b) fromtable name group by colu mn 1,colu mn 2,.)alter tabletable name drop colu mn colu mn_b20、说明:列出数据库里所有的表名select n ame from sysobjects where type=U / U代表用户21、说明:列出表里的所有的列名select n ame from syscolu mns where id=object_id(TableName)22、 说明:列示type、vender、pcs字段,以type字段排列,case可以方便地 实现多重选择,类似select中的case。select type,sum(case ven der whe n A the n pcs else 0 en d),sum(case vender when C then pcs else 0 end),sum(case vender when B then pcselse 0 end) FROM table name group by type显示结果:type ven der pcs电脑A 1电脑A 1光盘B 2光盘A 2手机B 3手机C 323、说明:初始化表table1TRUNCATE TABLE table124、说明:选择从10到15的记录select top 5 * from (select top 15 * from table order by id asc) tabl e_另廿名 order by id desc三、技巧1、1=1, 1=2的使用,在SQL语句组合时用的较多“ where 1=1 ”是表示选择全部“ where 1=2 ”全部不选,如:if strWhere !=beg inset strSQL = select co un t(*) as Total from + tblName + where + strWhereendelsebeg inset strSQL = select co un t(*) as Total from + tblName + end我们可以直接写成错误!未找到目录项。set strSQL = select co un t(*) as Total from + tblName + wher e 1=1+ strWhere 2、收缩数据库-重建索引DBCC REINDEXDBCC INDEXDEFRAG-收缩数据和日志DBCC SHRINKDBDBCC SHRINKFILE3、压缩数据库dbcc shri nkdatabase(db name)4、转移数据库给新用户以已存在用户权限exec sp_cha nge_users_log in update_ on e, newn ame,old namego5、检查备份集RESTORE VERIFYONLY from disk=E:dvbbs.bak6修复数据库ALTER DATABASE dvbbs SET SINGLE_USERGODBCC CHECKDB(dvbbs,repair_allow_data_loss) WITH TABLOCK GOALTER DATABASE dvbbs SET MULTIUSERGO7、日志清除SET NOCOUNT ONDECLARE LogicalFileName sys name,MaxMi nu tes INT,NewSize INTUSE table name - 要操作的数据库名SELECT LogicalFileName = table name_log,-日志文件名MaxMinutes = 10, - Limit on time allowed to wrap log. NewSize = 1 -你想设定的日志文件的大小(M)Setup / in itializeDECLARE Origi nalSize intSELECT Origi nalSize = sizeFROM sysfilesWHERE name = LogicalFileNameSELECT Origi nal Size of + db_name() + LOG is + CONVERT(VARCHAR(30),Origi nalSize) + 8K pages or + CONVERT(VARCHAR(30),(Origi nalSize*8/1024) + MB FROM sysfilesWHERE name = LogicalFileNameCREATE TABLE DummyTra ns(DummyColu mn char (8000) not null)DECLARE Cou nter INT,StartTime DATETIME,Tru ncLog VARCHAR(255)SELECT StartTime = GETDATE(),Trun cLog = BACKUP LOG + db_name() + WITH TRUNCATE_ONLYDBCC SHRINKFILE (LogicalFileName, NewSize)EXEC (Tru ncLog)-Wrap the log if n ecessary.WHILE MaxMi nu tes DATEDIFF (mi, StartTime, GETDATE() - time has not expiredAND Origi nalSize = (SELECT size FROM sysfiles WHERE name = Logical FileName)AND (OriginalSize * 8 /1024) NewSizeBEGIN - Outer loop.SELECT Co un ter = 0WHILE (Cou nter Origi nalSize / 16) AND (Cou nter 50000) BEGIN - updateINSERT DummyTra ns VALUES (Fill Log) DELETE DummyTra nsSELECT Cou nter = Cou nter + 1ENDEXEC (Tru ncLog)ENDSELECT Fi nal Size of + db_name() + LOG is + CONVERT(VARCHAR(30),size) + 8K pages or + CONVERT(VARCHAR(30),(size*8/1024) + MB FROM sysfilesWHERE name = LogicalFileNameDROP TABLE DummyTra nsSET NOCOUNT OFF8、说明:更改某个表exec sp_cha ngeobjectow ner table name,dbo9、存储更改全部表CREATE PROCEDURE dbo.User_Cha ngeObjectOw nerBatch OldOw ner as NVARCHAR(128),NewOw ner as NVARCHAR(128)ASDECLARE Name as NVARCHAR(128)DECLARE Ow ner as NVARCHAR(128)DECLARE Ow nerName as NVARCHAR(128)DECLARE curObject CURSOR FORselect Name = n ame,Ow ner = user_ name(uid)from sysobjectswhere user_ name(uid)=OldOw nerorder by n ameOPEN curObjectFETCH NEXT FROM curObject INTO Name, Ow nerWHILE(FETCH_STATUS=0)BEGINif Ow ner=OldOw nerbeg inset Ow nerName = OldOw ner + . + rtrim(Name)exec sp_cha ngeobjectow ner Ow nerName, NewOw nerend-select n ame,NewOw ner,OldOw nerFETCH NEXT FROM curObject INTO Name, Ow ner END close curObject deallocate curObjectGO10、SQL SERVER中直接循环写入数据declare i intset i=1while i30begi nin sert into test (userid) values(i)set i=i+1 end案例:0.1的基礎上,使他們剛好及格有如下表,要求就裱中所有沒有及格的成績,在每次增長Name scoreZhangshan80Lishi59Wan gwu50Songquan69while(selectmin( score) from tb_table)60)beginupdate tb_table set score=score* 1.01where score 60 breakelsecon ti nue end数据开发-经典1.按姓氏笔画排序:Select * From TableName Order By CustomerName Collate Chi nese_PRC_Str oke_ci_as / 从少到多2.数据库加密:select encrypt( 原始密码) select pwdencrypt(原始密码)加密后密码)=1-加密后密码)=1-相同;否则不相同encr相同;否则不相同select pwdcompare( 原始密码, ypt(原始密码)select pwdencrypt( 原始密码) select pwdcompare( 原始密码,3.取回表中字段:declare list varchar(1000),sql n varchar(1000)select list=list+ , +b.n ame from sysobjects a,syscolu mns b where a. id=b.id and a.name= 表 Aset sql= select +right(list,len(list)-1)+ from 表 Aexec (sql) 4.查看硬盘分区:EXEC master.xp_fixeddrives5. 比较A,B表是否相等:if (select checksum_agg(bi nary_checksum(*) from A)(select checksum_agg(bi nary_checksum(*) from B)print 相等elseprin t 不相等6. 杀掉所有的事件探察器进程:DECLARE hcforeach CURSOR GLOBAL FOR SELECT kill +RTRIM(spid) FROM m aster.dbo.sysprocessesWHERE program_name IN(SQL profiler,NSQL事件探查器)EXEC sp_msforeach_worker ? 7.记录搜索:开头到N条记录Select Top N * From 表N到M条记录(要有主索引ID)Select Top M-N * From 表 Where ID in (Select Top M ID From 表)Order by ID DescN到结尾记录Select Top N * From 表 Order by ID Desc案例例如1 :张表有一万多条记录,表的第一个字段 RecID是自增长字段,写一个SQL语句,找出表的第31到第40个记录。select top 10 recid from A where recid not in( select top 30 recid from A)分析:如果这样写会产生某些问题,如果recid在表中存在逻辑索引。select top 10 recid from A where,是从索引中查找,而后面的select top 30 recidfrom A则在数据表中查找,这样由于索引中的顺序有可能和数据表中的不一致,这样就导 致查询到的不是本来的欲得到的数据。解决方案1,用 order by select top 30 recid from A order by ricid如果该字段不是自增长,就会出现问题2,在那个子查询中也加条件:select top 30 recid from A where recid-1例2:查询表中的最后以条记录,并不知道这个表共有多少数据,以及表结构。set s = select top 1 * from T where pid not in (select top + str(count-1) + pid from T)print s exec sp_executesql s9:获取当前数据库中的所有用户表select Name from sysobjects where xtype=u and status=0 10:获取某一个表的所有字段select name fromsyscolumns where id= object_id ( 表名)sysobjects whselect n ame from syscolu mns where id in (select id from ere type = u and n ame = 表名) 两种方式的效果相同11:查看与某一个表相关的视图、存储过程、函数select a.* from sysobjects a, syscommentsb where a.id = b.id and b.t ext like % 表名 % 12:查看当前数据库中所有存储过程select name as 存储过程名称 from sysobjects where xtype=P 13:查询用户创建的所有数据库select * from master. sysdatabases D where sid not in (select sid from master. syslogins where name=sa)或者select dbid, name AS DB_NAME from master.s ysdatabases where sid 0 x01 14:查询某一个表的字段和数据类型select colu mn_n ame,data_type from in formati on _schema.colu mns where table_name =表名15:不同服务器数据库之间的数据操作-创建链接服务器exec sp_addlinkedserver ITSV : : SQLOLEDB ,远程服务器名或 ip 地址exec sp_addlinkedsrvlogin ITSV : false ,null,用户名: 密码-查询示例select * from ITSV. 数据库名.dbo.表名-导入示例select * into 表 from ITSV. 数据库名.dbo.表名-以后不再使用时删除链接服务器exec sp_dropserver ITSV , droplogi ns -连接远程 / 局域网数据(openrowset/openquery/opendatasource)-1、openrowset-查询示例select * from openrowset(SQLOLEDB , sql服务器名; 用户名; 密码,数据库名.dbo.表名)-生成本地表select * into 表 from openrowset(SQLOLEDB , sql服务器名; 用户名; 密码,数据库名.dbo.表名)-把本地表导入远程表insert openrowset(SQLOLEDB , sql服务器名; 用户名; 密码,数据库名.dbo.表名)select *from 本地表-更新本地表update bset b.列 A=a.列 Afrom openrowset(SQLOLEDB , sql服务器名; 用户名; 密码,数据库名.dbo.表名)as a inner join本地表 bon a.colu mn 仁b.colu mn1-ope nquery 用法需要创建一个连接-首先创建一个连接创建链接服务器exec sp_addlinkedserver ITSV : : SQLOLEDB ,远程服务器名或ip 地址-查询 select *FROM openquery(ITSV, SELECT * FROM 数据库.dbo.表名)-把本地表导入远程表insert openquery(ITSV, SELECT * FROM 数据库.dbo.表名)select * from 本地表-更新本地表update bset b.列 B=a.列 BFROM openquery(ITSV, SELECT * FROM 数据库.dbo.表名)as ainner join 本地表 b on a. 列 A=b.列 A-3、opendatasource/openrowsetSELECT *FROM ope ndatasource( SQLOLEDB , Data Source=ip/ServerName;User ID= Password=密码).test.dbo.roy_ta-把本地表导入远程表in sert ope ndatasource( SQLOLEDB , Data Source=ip/ServerName;User ID= Password=密码). 数据库.dbo.表名登陆名;登陆名;select * from 本地表SQL Server基本函数SQL Server基本函数1.字符串函数 长度与分析用1, datalength (Char_expr)返回字符串包含字符数,但不包含后面的空格2, substri ng (expressio n,start,le ngth)取子串,字符串的下标是从“ 1”,start为起始位置,length为字符串长度,实际应用中以len(expression)取得 其长度3, right (char_expr,int_expr)返回字符串右边第int_expr个字符,还用left于之相反4,isnull ( check_expression , replacement_value )女口果 check_expression為空,則返回 replacement_value 的值,不為空,就返回 check_expression 字符操作类5,Sp_addtype自定義數據類型例如:EXEC sp_addtype birthday, datetime, NULL6, set nocount on|off使返回的结果中不包含有关受 Tran sact-SQL语句影响的行数的信息。如果存储 过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。SETNOCOUN设置是在执行或运行时设置,而不是 在分析时设置。SETNOCOUN为ON时,不返回计数(表示受Transact-SQL 语句影响的行数)。 SET NOCOUN为OFF时,返回计数常识在 SQL 查询中: from 后最多可以跟多少张表或视图:256在 SQL 语句中出现 Order by , 查询时, 先排序,后取在SQL中,一个字段的最大容量是8000,而对于nvarchar(4000),由于nvarchar是Unicode码。SQLServer2000 同步复制技术实现步骤一、 预备工作1. 发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户- 管理工具- 计算机管理- 用户和组- 右键用户- 新建用户- 建立一个隶属于 administrator 组的登陆 windows 的用户( SynUser)2. 在发布服务器上 ,新建一个共享目录 , 做为发布的快照文件的存放目录 ,操作:我的电脑 -D: 新建一个目录 , 名为: PUB- 右键这个新建的目录- 属性 - 共享- 选择 共享该文件夹 -通过权限按纽来设置具体的用户权限,保证第一步中创建的用户 (SynUser) 具有对该文件夹的所有权限- 确定3. 设置SQL代理(SQLSERVERAGEN服务的启动用户(发布/订阅服务器均做此设置 ) 开始-程序-管理工具 -服务- 右键 SQLSERVERAGENT- 属性 - 登陆- 选择 此账户 - 输入或者选择第一步中创建的 windows 登录用户名( SynUser)- 密码 中输入该用户的密码4. 设置 SQL Server 身份验证模式 , 解决连接时的权限问题 (发布/订阅服务器均做此设置 ) 企业管理器-右键SQL实例-属性- 安全性 - 身份验证- 选择 SQL Server 和 Windows- 确定5. 在发布服务器和订阅服务器上互相注册企业管理器- 右键 SQL Server 组- 新建 SQL Server 注册 .- 下一步 - 可用的服务器中 , 输入你要注册的远程服务器名 - 添加- 下一步 - 连接使用 ,选择第二个 SQL Server 身份验证 - 下一步 - 输入用户名和密码( SynUser )- 下一步 - 选择 SQL Server 组 , 也可以创建一个新组- 下一步 - 完成6. 对于只能用 IP, 不能用计算机名的 ,为其注册服务器别名(此步在实施中没用到)( 在连接端配置 ,比如,在订阅服务器上配置的话 ,服务器名称中输入的是发布服务器的IP)开始 - 程序 -Microsoft SQL Server-客户端网络实用工具- 别名 - 添加-网络库选择tcp/ip- 服务器别名输入SQL服务器名-连接参数-服务器名称中输入 SQL服务器ip地址-如果你修改了 SQL的端口,取消选择动态决定端口 ,并输入对应的端口号二、 正式配置1、配置发布服务器打开企业管理器,在发布服务器( B、C、D)上执行以下步骤:(1) 从工具下拉菜单的 复制子菜单中选择 配置发布、 订阅服务器和分发 出现配置发布 和分发向导(2) 下一步 选择分发服务器 可以选择把发布服务器自己作为分发服务器或者其他 sql 的服务器(选择自己)(3) 下一步 设置快照文件夹 采用默认 servernamePub(4) 下一步 自定义配置可以选择 : 是, 让我设置分发数据库属性启用发布服务器或设置发布设置否, 使用下列默认设置(推荐)(5) 下一步 设置分发数据库名称和位置 采用默认值(6) 下一步 启用发布服务器 选择作为发布的服务器(7) 下一步 选择需要发布的数据库和发布类型(8) 下一步 选择注册订阅服务器(9) 下一步 完成配置2、创建出版物发布服务器 B、 C、 D 上(1) 从 工具菜单的 复制 子菜单中选择 创建和管理发布 命令(2) 选择要创建出版物的数据库,然后单击 创建发布 (3) 在 创建发布向导 的提示对话框中单击 下一步 系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助 )(4) 单击下一步系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVE允许在不同的数据库如 orACLE或ACCESS间进行数据复制。但是在这里我们选择运行 SQL SERVER 2000的数据库服务器(5) 单击下一步系统就弹出一个定义文章的对话框也就是选择要出版的表 注意 : 如果前面选择了事务发布 则再这一步中只能选择带有主键的表(6) 选择发布名称和描述(7) 自定义发布属性 向导提供的选择 :是 我将自定义数据筛选 , 启用匿名订阅和或其他自定义属性 否 根据指定方式创建发布 (建议采用自定义的方式)(8) 下一步 选择筛选发布的方式(9) 下一步 可以选择是否允许匿名订阅1)如果选择署名订阅 , 则需要在发布服务器上添加订阅服务器方法 : 工具 - 复制 - 配置发布、订阅服务器和分发的属性 - 订阅服务器 中添加 否则在订阅服务器上请求订阅时会出现的提示 : 改发布不允许匿名订阅 如果仍然需要匿名订阅则用以下解决办法 企业管理器 - 复制 - 发布内容 - 属性 - 订阅选项 选择允许匿名请求订阅 2)如果选择匿名订阅 , 则配置订阅服务器时不会出现以上提示(10) 下一步 设置快照 代理程序调度有字段 :id,name,phone, 有字段 :id,name,telphone,adress(11) 下一步 完成配置 当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库 有数据srv1. 库名 .author要求:srv1. 库名 .author srv1. 库名 .author -*/srv2. 库名 .author增加记录则 srv1. 库名 .author 记录增加的 phone 字段更新,则 srv1. 库名 .author 对应字段 telphone 更新- 大致的处理步骤-1. 在 srv1 上创建连接服务器 , 以便在 srv1 中操作 srv2, 实现同步exec sp_addlinkedserver srv2,SQLOLEDB,srv2的 sql 实例名或 ipexec sp_addlinkedsrvlogin srv2,false,null,用户名 , 密码 go-2. 在 srv1 和 srv2 这两台电脑中 , 启动 msdtc( 分布式事务处理服务 ), 并且设置为自动 启动。我的电脑 - 控制面板 - 管理工具 - 服务 - 右键 Distributed Transaction Coordinator- 属性 - 启动 - 并将启动类型设置为自动启动go- 然后创建一个作业定时调用上面的同步处理存储过程就行了 企业管理器- 管理-SQL Server 代理- 右键作业- 新建作业- 常规 项中输入作业名称- 步骤 项- 新建- 步骤名 中输入步骤名- 类型中选择 Transact-SQL 脚本 (TSQL)- 数据库 选择执行命令的数据库- 命令 中输入要执行的语句 : exec p_process- 确定- 调度 项- 新建调度- 名称 中输入调度名称- 调度类型 中选择你的作业执行安排- 如果选择 反复出现 - 点更改 来设置你的时间安排然后将 SQL Agent 服务启动 , 并设置为自动启动 , 否则你的作业不会被执行设置方法 :我的电脑-控制面板-管理工具-服务-右键SQLSERVERAGENT!性-启动类型-选择” 自动启动 - 确定 .-3. 实现同步处理的方法2, 定时同步- 在 srv1 中创建如下的同步处理存储过程create proc p_processas- 更新修改过的数据update b set name=i.name,telphone=i.telphonefrom srv2. 库名 .dbo.author b,author iwhere b.id=i.id and(b.name i.name or b.telphone i.telphone)- 插入新增的数据insert srv2. 库名 .dbo.author(id,name,telphone)select id,name,telphone from author iwhere not exists(select * from srv2. 库名 .dbo.author where id=i.id)- 删除已经删除的数据 ( 如果需要的话 )delete bfrom srv2. 库名 .dbo.author bwhere not exists(select * from author where id=b.id)goSQL 查询语句关键字方法distinct 关键字 显示没有重复记录的商品名称,商品价格和商品类别列表。 select distinct ware_name,price from t_ware;使用计算列查询所有商品价格提高 20%后的价格。 select ware_id,ware_name,price*1.2 from t_ware;列的别名a) 不使用 asselect ware_id,ware_name,price*1.2 as price_raise from t_ware; b) 使用 asselect ware_id,ware_name,price*1.2 price_raise from t_ware;使用逻辑表达式a) not显示商品价格不大于 100 的商品notnotselect ware_id,ware_name,price,category_id from t_ware where price100;b) and显示商品价格大于 100 且商品类别编号为 5 的商品select ware_id,ware_name,price,category_id from t_ware where price100;c) or 显示商品类别编号为 5 或 6 或 7 的商品select ware_id,ware_name,price,category_id from t_ware where category_id=5 or category_id=6 or category_id=7;使用 between 关键字显示商品价格在 200元至 1000元之间的商品(留心一下,是半开区间还是封闭 区间?)select ware_id,ware_name,price,category_id from t_ware where price between 200 and 1000;使用 in 关键字显示商品类别为 5,6,7 且价格不小于 200 元的商品select ware_id,ware_name,price,category_id from t_ware where category_id in (5,6,7) and price=200;使用 like 子句进行模糊查询a) % (百分号)表示0到n个任意字符select ware_id,ware_name,price,category_id from t_ware where ware_namelike % 纯棉 %;b) _ (下划线)表示单个的任意字符select ware_id,ware_name,price,category_id from t_ware where ware_namelike % 长袖 _恤%;转义字符 escape 的使用select ware_id,ware_name,price,category_id from t_ware where ware_name like % escape
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿件


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!