澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

SQL2008语句大全,sql语句大全

2019-08-03 作者:数据库网络   |   浏览(193)

一、基础

mysql sql语句大全

 

1、表达:创制数据库

CREATE DATABASE database-name

2、表明:删除数据库

drop database dbname

3、说明:备份sql server

--- 创造 备份数据的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'

--- 开始 备份

BACKUP DATABASE pubs TO testBack

4、表达:成立新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

基于已有的表成立新表:

A:create table tab_new like tab_old (使用旧表成立新表)

B: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

注:列扩充后将不可能去除。DB2中列加上后数据类型也不可能退换,独一能改造的是充实varchar类型的长度。

7、说明:增加主键: Alter table tabname add primary key(col)

注解:删除主键: Alter table tabname drop primary key(col)

8、表明:创设索引:create [unique] index idxname on tabname(col….)

剔除索引:drop index idxname

注:索引是不行更改的,想改造必须删除重新建。

9、表达:创设视图:create view viewname as select statement

删除视图:drop view viewname

10、表明:多少个轻易的核心的sql语句

选择:select * from table1 where 范围

插入:insert into table1(field1,field2) values(value1,value2)

删除:delete from table1 where 范围

更新:update table1 set field1=value1 where 范围

查找:select * from table1 where 田野同志1 like ’%value1%’ ---like的语法一点都不大巧,查资料!

排序:select * from table1 order by field1,field2 [desc]

总数:select count as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1

11、表达:多少个高档查询运算词

A: UNION 运算符

UNION 运算符通过整合别的三个结实表(举个例子 TABLE1 和 TABLE2)并消去表中别的重复行而派生出贰个结实表。当 ALL 随 UNION 一同行使时(即 UNION ALL),不排除重复行。二种情况下,派生表的每一行不是缘于 TABLE1 正是源于 TABLE2。

B: EXCEPT 运算符

EXCEPT 运算符通过包蕴具有在 TABLE1 中但不在 TABLE第22中学的行并消除全数重复行而派生出二个结出表。当 ALL 随 EXCEPT 一齐利用时 (EXCEPT ALL),不免除重复行。

C: INTERSECT 运算符

INTE奥德赛SECT 运算符通过只满含 TABLE1 和 TABLE2中都一些行并解决全体重复行而派生出二个结果表。当 ALL 随 INTE奥迪Q5SECT 一齐利用时 (INTESportageSECT 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.c

B: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_renamedb 'old_name', 'new_name'

 

二、提升

1、表达:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1(仅用于SQlServer)

法二:select top 0 * into b from a

2、表达:拷贝表(拷贝数据,源表名:a 目的表名:b) (Access可用)

insert 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 in '"&Server.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,c from a where a IN (1,2,3)

5、表达:呈现小说、提交人和最终回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、表明:外接连查询(表名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.c

7、表达:在线视图查询(表名1:a )

select * from (SELECT a,b,c FROM a) T where t.a > 1;

8、表明:between的用法,between限制查询数据范围时满含了边界值,not between不富含

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2

9、表明:in 的应用办法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、表达:两张关联表,删除主表中已经在副表中尚无的音信

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、表达:四表联查难题:

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 语句消除数据库分页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

切切实实落成:

至于数据库分页:

  declare @start int,@end int

  @sql  nvarchar(600)

  set @sql=’select top’ str(@[email protected] 1) ’ from T where rid not in(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 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条数据

select top 10 * from tablename order by newid()

18、表明:随机选拔记录

select newid()

19、表明:删除重复记录

1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

2),select distinct * into temp from tablename

  delete from tablename

  insert into tablename select * from temp

商量: 这种操作牵连大气的数据的移动,这种做法不合乎大体量但数额操作

3),举例:在一个外表表中程导弹入数据,由于一些原因首先次只导入了一局地,但很难确定具体地点,这样只有在下三回全部导入,那样也就发生众多再一次的字段,怎么着删除重复字段

alter table tablename

--加多一个自增列

add  column_b int identity(1,1)

 delete from tablename where column_b not in(

select max(column_b)  from tablename group by column1,column2,...)

alter table tablename drop column column_b

20、表明:列出数据Curry有着的表名

select name from sysobjects where type='U' // U代表用户

21、表达:列出表里的全部的列名

select name from syscolumns where id=object_id('TableName')

22、表明:列示type、vender、pcs字段,以type字段排列,case能够方便地贯彻多种选拔,类似select 中的case。

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

显示结果:

type vender pcs

电脑 A 1

电脑 A 1

光盘 B 2

光盘 A 2

手机 B 3

手机 C 3

23、表明:发轫化表table1

TRUNCATE TABLE table1

24、说明:选择从10到15的记录

select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

三、技巧

1、1=1,1=2的利用,在SQL语句组合时用的很多

“where 1=1” 是表示选用任何    “where 1=2”全体不选,

如:

if @strWhere !=''

begin

set @strSQL = 'select count(*) as Total from [' @tblName '] where ' @strWhere

end

else

begin

set @strSQL = 'select count(*) as Total from [' @tblName ']'

end

大家得以直接写成

不当!未找到目录项。

set @strSQL = 'select count(*) as Total from [' @tblName '] where 1=1 安定 ' @strWhere 2、缩小数据库

--重新创设索引

DBCC REINDEX

DBCC INDEXDEFRAG

--减少数据和日志

DBCC SHRINKDB

DBCC SHRINKFILE

3、压缩数据库

dbcc shrinkdatabase(dbname)

4、转移数据库给新用户以已存在用户权限

exec sp_change_users_login 'update_one','newname','oldname'

go

5、检查备份集

RESTORE VERIFYONLY from disk='E:dvbbs.bak'

6、修复数据库

ALTER DATABASE [dvbbs] SET SINGLE_USER

GO

DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK

GO

ALTER DATABASE [dvbbs] SET MULTI_USER

GO

7、日志清除

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,

 @MaxMinutes INT,

 @NewSize INT

 

USE tablename -- 要操作的多少库名

SELECT  @LogicalFileName = 'tablename_log', -- 日志文件名

@MaxMinutes = 10, -- Limit on time allowed to wrap log.

 @NewSize = 1  -- 你想设定的日记文件的轻重(M)

Setup / initialize

DECLARE @OriginalSize int

SELECT @OriginalSize = size

 FROM sysfiles

 WHERE name = @LogicalFileName

SELECT 'Original Size of ' db_name() ' LOG is '

 CONVERT(VARCHAR(30),@OriginalSize) ' 8K pages or '

 CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) 'MB'

 FROM sysfiles

 WHERE name = @LogicalFileName

CREATE TABLE DummyTrans

 (DummyColumn char (8000) not null)

 

DECLARE @Counter    INT,

 @StartTime DATETIME,

 @TruncLog   VARCHAR(255)

SELECT @StartTime = GETDATE(),

 @TruncLog = 'BACKUP LOG ' db_name() ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

EXEC (@TruncLog)

-- Wrap the log if necessary.

WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

 AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) 

 AND (@OriginalSize * 8 /1024) > @NewSize 

 BEGIN -- Outer loop.

SELECT @Counter = 0

 WHILE   ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

 BEGIN -- update

 INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans

 SELECT @Counter = @Counter 1

 END

 EXEC (@TruncLog) 

 END

SELECT 'Final Size of ' db_name() ' LOG is '

 CONVERT(VARCHAR(30),size) ' 8K pages or '

 CONVERT(VARCHAR(30),(size*8/1024)) 'MB'

 FROM sysfiles

 WHERE name = @LogicalFileName

DROP TABLE DummyTrans

SET NOCOUNT OFF

8、表明:退换有些表

exec sp_changeobjectowner 'tablename','dbo'

9、存储更动全数表

CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch

@OldOwner as NVARCHAR(128),

@NewOwner as NVARCHAR(128)

AS

DECLARE @Name    as NVARCHAR(128)

DECLARE @Owner   as NVARCHAR(128)

DECLARE @OwnerName   as NVARCHAR(128)

DECLARE curObject CURSOR FOR

select 'Name'    = name,

   'Owner'    = user_name(uid)

from sysobjects

where user_name(uid)[email protected]

order by name

OPEN   curObject

FETCH NEXT FROM curObject INTO @Name, @Owner

WHILE(@@FETCH_STATUS=0)

BEGIN   

if @[email protected]

begin

   set @OwnerName = @OldOwner '.' rtrim(@Name)

   exec sp_changeobjectowner @OwnerName, @NewOwner

end

-- select @name,@NewOwner,@OldOwner

FETCH NEXT FROM curObject INTO @Name, @Owner

END

close curObject

deallocate curObject

GO

 

10、SQL SEWranglerVE福特Explorer中一直循环写入数据

declare @i int

set @i=1

while @i<30

begin

    insert into test (userid) values(@i)

    set @[email protected] 1

end

案例:

犹如下表,须要就裱中具有沒有及格的成績,在历次增長0.1的基礎上,使他們剛好及格:

 Name     score

 Zhangshan 80

 Lishi       59

 Wangwu      50

 Songquan 69

while((select min(score) from tb_table)<60)

begin

update tb_table set score =score*1.01

where score<60

if  (select min(score) from tb_table)>60

  break

 else

    continue

end

 

数据开垦-杰出

 

1.按姓氏笔画排序:

Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //从少到多

2.数据库加密:

select encrypt('原始密码')

select pwdencrypt('原始密码')

select pwdcompare('原始密码','加密后密码') = 1--一样;不然不等同 encrypt('原始密码')

select pwdencrypt('原始密码')

select pwdcompare('原始密码','加密后密码') = 1--同样;否则不均等

3.取回表中字段:

declare @list varchar(1000),

@sql nvarchar(1000)

select @[email protected] ',' b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'

set @sql='select ' right(@list,len(@list)-1) ' from 表A'

exec (@sql)

4.查看硬盘分区:

EXEC master..xp_fixeddrives

5.比较A,B表是不是等于:

if (select checksum_agg(binary_checksum(*)) from A)

     =

    (select checksum_agg(binary_checksum(*)) from B)

print '相等'

else

print '不相等'

6.杀掉全体的风浪探察器进度:

DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill ' RTRIM(spid) FROM master.dbo.sysprocesses

WHERE program_name IN('SQL profiler',N'SQL 事件探查器')

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   Desc


N到最终记录

Select Top N * From 表 Order by ID Desc

案例

比方1:一张表有两万多条记下,表的首先个字段 RecID 是自拉长字段, 写叁个SQL语句,寻找表的第31到第四十四个记录。

 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 recid from 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  @s

9:获取当前数据库中的全体用户表

select Name from sysobjects where xtype='u' and status>=0

10:获取某一个表的有所字段

select name from syscolumns where id=object_id('表名')

select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')

三种方法的职能同样

11:查看与某二个表相关的视图、存款和储蓄过程、函数

select a.* from sysobjects a, syscomments b where a.id = b.id and b.text 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..sysdatabases where sid <> 0x01

14:查询某三个表的字段和数据类型

select column_name,data_type from information_schema.columns

where table_name = '表名'

15:不一样服务器数据库之间的数量操作

--创造链接服务器

exec sp_addlinkedserver   'ITSV ', ' ', 'SQ英雄联盟EDB ', '远程服务器名或ip地址 '

exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名 ', '密码 '

--查询示例

select * from ITSV.数据库名.dbo.表名

--导入示例

select * into 表 from ITSV.数据库名.dbo.表名

--现在不再利用时去除链接服务器

exec sp_dropserver  'ITSV ', 'droplogins '

 

--连接远程/局域网数据(openrowset/openquery/opendatasource)

--1、openrowset

--查询示例

select * from openrowset( 'SQ英雄联盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--生耗费地球表面

select * into 表 from openrowset( 'SQ英雄结盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

 

--把本地表导入远程表

insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

select *from 本地表

--更新本地表

update b

set b.列A=a.列A

 from openrowset( 'SQ英雄结盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地球表面 b

on a.column1=b.column1

--openquery用法须求创立二个接连

--首先创造三个老是创立链接服务器

exec sp_addlinkedserver   'ITSV ', ' ', 'SQ英雄联盟EDB ', '远程服务器名或ip地址 '

--查询

select *

FROM openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ')

--把地点表导入远程表

insert openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ')

select * from 本地表

--更新本地球表面

update b

set b.列B=a.列B

FROM openquery(ITSV,  'SELECT * FROM 数据库.dbo.表名 ') as a 

inner join 本地表 b on a.列A=b.列A

 

--3、opendatasource/openrowset

SELECT   *

FROM   opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta

--把本地球表面导入远程表

insert opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名

select * from 本地表 

SQL Server基本函数

SQL Server基本函数

1.字符串函数 长度与分析用

1,datalength(Char_expr) 重临字符串包蕴字符数,但不富含后边的空格

2,substring(expression,start,length) 取子串,字符串的下标是从“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, 'NULL'

6,set nocount {on|off}

使重返的结果中不含有关于受 Transact-SQL 语句影响的行数的音信。假如存储进度中带有的有个别讲话并不回来繁多实在的数量,则该装置由于大批量缩减了互联网流量,由此可了解提升质量。SET NOCOUNT 设置是在推行或运营时设置,并不是在深入分析时设置。

SET NOCOUNT 为 ON 时,不回去计数(表示受 Transact-SQL 语句影响的行数)。

SET NOCOUNT 为 OFF 时,重临计数

常识

 

在SQL查询中:from后最多能够跟多少张表或视图:256

在SQL语句中出现 Order by,查询时,先排序,后取

在SQL中,三个字段的最大体量是九千,而对此nvarchar(五千),由于nvarchar是Unicode码。 

  

SQLServer贰仟同步复制工夫达成步骤

一、 预备专门的职业

1.公告服务器,订阅服务器都创设三个同名的windows用户,并设置同一的密码,做为公布快速照相文件夹的有效性访谈用户

--管理工科具

--Computer管理

--用户和组

--右键用户

--新建用户

--建构一个附属于administrator组的登录windows的用户(SynUser)

2.在发布服务器上,新建一个分享目录,做为公布的快速照相文件的贮存目录,操作:

自己的管理器--D: 新建四个索引,名叫: PUB

--右键那几个新建的目录

--属性--共享

--选择"分享该公文夹"

--通过"权限"按纽来设置具体的用户权限,有限支撑第一步中创造的用户(SynUser) 具有对该公文夹的富有权限

 

--确定

3.装置SQL代理(SQLSEENCOREVERAGENT)服务的开发银行用户(发表/订阅服务器均做此设置)

起来--程序--处理工科具--服务

--右键SQLSERVERAGENT

--属性--登陆--选择"此账户"

--输入恐怕选取第一步中创制的windows登入用户名(SynUser)

--"密码"中输入该用户的密码

4.设置SQL Server身份验证方式,化解连接时的权限难点(发表/订阅服务器均做此设置)

信用社管理器

--右键SQL实例--属性

--安全性--身份验证

--选择"SQL Server 和 Windows"

--确定

5.在颁发服务器和订阅服务器上竞相注册

商厦管理器

--右键SQL Server组

--新建SQL Server注册...

--下一步--可用的服务器中,输入你要登记的远程服务器名 --增加

--下一步--连接使用,选拔第四个"SQL Server身份验证"

--下一步--输入用户名和密码(SynUser)

--下一步--接纳SQL Server组,也得以创建贰个新组

--下一步--完成

6.对于只能用IP,不能够用Computer名的,为其登记服务器小名(此步在实行中没用到)

 (在连接端配置,举个例子,在订阅服务器上安顿来讲,服务器名称中输入的是宣布服务器的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)单击[下一步]系统要求内定可以订阅该公告的数据库服务器类型,

SQLSEEscortVE奥迪Q5允许在分裂的数据库如 orACLE或ACCESS之间开始展览数据复制。

不过在那边咱们选拔运维"SQL SE奥迪Q3VE奥德赛 3000"的数据库服务器

(5)单击[下一步]系统就弹出三个概念小说的对话框也正是采取要出版的表

小心: 若是前方选拔了专业公布 则再这一步中只好选取带有主键的表

(6)采取揭橥名称和汇报

(7)自定义发表属性 向导提供的采纳:

是 笔者将自定义数据筛选,启用佚名订阅和或其余自定义属性

否 依照钦赐格局开创发布 (提议使用自定义的格局)

(8)[下一步] 采纳筛选公布的点子

(9)[下一步] 能够挑选是或不是同意无名订阅

1)假若选择签名订阅,则供给在公布服务器上加多订阅服务器

方法: [工具]->[复制]->[安排发表、订阅服务器和分发的性质]->[订阅服务器] 中添加

不然在订阅服务器上呼吁订阅时会出现的升迁:改发表不允许佚名订阅

比如还是需求无名氏订阅则用以下化解办法

[公司管理器]->[复制]->[发表内容]->[属性]->[订阅选项] 接纳允许无名央浼订阅

2)如若采纳佚名订阅,则安插订阅服务器时不会油然则生上述提醒

(10)[下一步] 设置快速照相 代理程序调解

(11)[下一步] 完毕布局

当成功出版物的开创后创建出版物的数据库也就成为了一个分享数据库

有数据

srv1.库名..author有字段:id,name,phone,

srv2.库名..author有字段:id,name,telphone,adress

 

要求:

srv1.库名..author扩大记录则srv1.库名..author记录扩充

srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新

--*/

 

--大概的管理步骤

--1.在 srv1 上创建连接服务器,以便在 srv1 中操作 srv2,完毕同台

exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql实例名或ip'

exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密码'

go

--2.在 srv1 和 srv2 这两台计算机中,启动msdtc(分布式事务处理服务),况且安装为全自动运营

。作者的微型Computer--调整面板--管理工具--服务--右键 Distributed Transaction Coordinator--属性--运维--并将运行项目设置为自动运营

go

 

 

--然后创制八个作业定期调用地方的同台管理存款和储蓄进度就行了

 

信用合作社管理器

--管理

--SQL Server代理

--右键作业

--新建作业

--"常规"项中输入作业名称

--"步骤"项

--新建

--"步骤名"中输入步骤名

--"类型"中选择"Transact-SQL 脚本(TSQL)"

--"数据库"选择施行命令的数据库

--"命令"中输入要推行的语句: exec p_process

--确定

--"调度"项

--新建调节

--"名称"中输入调节名称

--"调解项目"中挑选你的课业试行安顿

--假若采用"频频出现"

--点"改换"来设置你的岁月安插

 

 

下一场将SQL Agent服务运营,并安装为机关运转,不然你的功课不会被实行

 

安装方法:

本身的微管理器--调节面板--管理工科具--服务--右键 SQLSELX570VERAGENT--属性--运行项目--选用"自动运转"--分明.

 

 

--3.贯彻同台管理的方法2,按时同步

 

--在srv第11中学创建如下的同台管理存款和储蓄进程

create proc p_process

as

--更新修改过的数额

update b set name=i.name,telphone=i.telphone

from srv2.库名.dbo.author b,author i

where 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 i

where not exists(

select * from srv2.库名.dbo.author where id=i.id)

 

--删除已经去除的数目(如若必要的话)

delete b

from srv2.库名.dbo.author b

where not exists(

select * from author where id=b.id)

go

sql语句大全 1、表达:成立数据库 CREATE DATABASE database-name 2、表明:删除数据库 drop database dbname 3、表达:备份sql server --- 创设 备份数据...

一、基础
1、表明:创立数据库

 SQL三千系统表的应用 

  1、说明:创制数据库

CREATE DATABASE database-name

–1:获取当前数据库中的全部用户表

一、基础
1、说明:创制数据库
CREATE DATABASE 数据库名
2、表明:删除数据库
drop database 数据库名
3、说明:备份sql server
--- 成立 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、表达:创造新表
create table 表名(字段1 类型1 [not null] [primary key],字段2 类型2 [not null],..)
依赖已某个表成立新表:
A:create table tab_new like tab_old (使用旧表创造新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、表明:删除新表
drop table 表名
6、表明:扩充四个列
Alter table 表名 add 字段名 col 类型
注:列增添后将不能够去除。DB第22中学列加上后数据类型也不能够更换,独一能退换的是增多varchar类型的长度。
7、表达:加多主键: Alter table 表名 add constraint 约束名 primary key(字段)
注解:删除主键: Alter table 表名 drop primary key(字段)
8、表达:创集中建索引:create [unique] [clustered]|nonclustered] index 索引名 on 表名(字段)
Unique→是还是不是是独一索引; nonclustered→非集中索引;clustered→集中索引
剔除索引:drop index 索引名
注:索引是不足改造的,想改造必须删除重新建。
9、表明:创制视图:create view 视图名 as select语句
删除视图:drop view 视图名
10、表达:多少个简易的查询sql语句
条件查询:select * from 表名 where 范围(条件)
插入:insert into 表名(字段1,字段2……) values (值1,值2……)
去除钦定条件的数量:delete from 表名 where 范围(条件)
更新:update 表名 set 字段1=值1,字段2=值2…… where 范围(条件)
混淆查找:select * from 表名 where 字段 like ’%value1%’ ---like的语法十分的小巧,查资料!
Select * from 表名 where 字段 like ‘value%’
Select * from 表名 where 字段 like ‘%value’
排序:select * from 表名 order by 字段1,字段2 [desc]
Desc→降序排列;asc→升序排列
总数:select count(*) from 表名
求和:select sum(字段) as 总计 from 表名
平均:select avg(字段) as 平均 from 表名
最大:select max(字段) as 最大 from 表名
最小:select min(字段) as 最小 from 表名
11、表明:多少个高等查询运算词
A: UNION 运算符
UNION 运算符通过整合其余多少个结实表(举个例子 TABLE1 和 TABLE2)并消去表中别的重复行而派生出三个结出表。当 ALL 随 UNION 一齐行使时(即 UNION ALL),不化解重复行。二种情状下,派生表的每一行不是源于 TABLE1 正是发源 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包罗具有在 TABLE1 中但不在 TABLE第22中学的行并解决全数重复行而派生出三个结实表。当 ALL 随 EXCEPT 一同利用时 (EXCEPT ALL),不免除重复行。
C: INTERSECT 运算符
INTEGL450SECT 运算符通过只囊括 TABLE1 和 TABLE第22中学皆有个别行并消除全体重复行而派生出贰个结出表。当 ALL 随 INTELANDSECT 一齐行使时 (INTEWranglerSECT 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.c
只顾:out是足以概括的
B: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_renamedb 'old_name', 'new_name'

  CREATE DATABASE database-name

 
2、表达:删除数据库

select Name from sysobjects where xtype=’u’ and status>=0

二、提升
1、表明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)(把a表的布局复制到b表)
法一:select * into b from a where 1<>1(仅用于SQlServer)
法二:select top 0 * into b from a
Select * into b from a 将表中a的多少和结构全复制到b表中
2、表明:拷贝表(拷贝数据,源表名:a 指标表名:b) (Access可用)
insert 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 in '"&Server.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,c from a where a IN (1,2,3)
5、表明:显示小说、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、表明:外接连查询(表名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.c
7、表达:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、表达:between的用法,between限制查询数据范围时包蕴了边界值,not between不包蕴
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、表达:in 的利用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、表达:两张关联表,删除主表中早已在副表中从未的新闻
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、表达:四表联合检查难点:
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 语句解决数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
现实贯彻:
至于数据库分页:
declare @start int,@end int
@sql nvarchar(600)
set @sql=’select top’ str(@end-@start 1) ’ from T where rid not in(select top’ str(@str-1) ’Rid from T where Rid>-1)’
exec sp_executesql @sql

  2、表达:删除数据库

drop database dbname 

–2:获取某一个表的装有字段

小心:在top后不能够一贯跟贰个变量,所以在骨子里运用中独有如此的拓展特别规的管理。Rid为三个标志列,假使top后还会有具体的字段,那样做是极度有好处的。因为如此可以幸免top的字段假设是逻辑索引的,查询的结果后其实表中的差异样(逻辑索引中的数占有相当的大希望和数量表中的不相同,而查询时只要处在索引则率先查询索引)
14、说明:前10条记录
select top 10 * form 表名 where 范围
15、表明:选取在每一组b值同样的多寡中对应的a最大的笔录的持有新闻(类似那样的用法能够用于论坛每月排名榜,每月畅销产品分析,按学科战表排行,等等.)
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条数据
select top 10 * from tablename order by newid()
18、表明:随机挑选记录
select newid()
19、表达:删除重复记录
1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
2),select distinct * into temp from tablename
delete from tablename
insert into tablename select * from temp
评说: 这种操作牵连大气的多少的活动,这种做法不切合大容积但多少操作
3),举个例子:在一个外表表中程导弹入数据,由于一些原因首先次只导入了一片段,但很难料定具体地点,这样唯有在下二遍全体导入,那样也就发生众多再度的字段,怎么样删除重复字段
alter table tablename
--增加二个自增列
add column_b int identity(1,1)
delete from tablename where column_b not in(
select max(column_b) from tablename group by column1,column2,...)
alter table tablename drop column column_b
20、表明:列出数据Curry有着的表名
select name from sysobjects where type='U' // U代表用户
21、表明:列出表里的有着的列名
select name from syscolumns where id=object_id('TableName')
22、表明:列示type、vender、pcs字段,以type字段排列,case能够方便地完毕多种接纳,类似select 中的case。
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
体现结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:开头化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
三、技巧
1、1=1,1=2的接纳,在SQL语句组合时用的非常多
“where 1=1” 是代表选取任何 “where 1=2”全部不选,
如:
if @strWhere !=''
begin
set @strSQL = 'select count(*) as Total from [' @tblName '] where ' @strWhere
end
else
begin
set @strSQL = 'select count(*) as Total from [' @tblName ']'
end
大家能够直接写成
错误!未找到目录项。
set @strSQL = 'select count(*) as Total from [' @tblName '] where 1=1 安定 ' @strWhere 2、收缩数据库
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--减少数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE
3、压缩数据库
dbcc shrinkdatabase(dbname)
4、转移数据库给新用户以已存在用户权限
exec sp_change_users_login 'update_one','newname','oldname'
go
5、检查备份集
RESTORE VERIFYONLY from disk='E:dvbbs.bak'
6、修复数据库
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO
7、日志清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT

  drop database dbname

3、说明:备份sql server

select name from syscolumns where id=object_id(‘表名’)

USE tablename -- 要操作的数据库名
SELECT @LogicalFileName = 'tablename_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想设定的日记文件的轻重缓急(M)
Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' db_name() ' LOG is '
CONVERT(VARCHAR(30),@OriginalSize) ' 8K pages or '
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)

  3、说明:备份sql server

--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack 

–3:查看与某一个表相关的视图、存款和储蓄进程、函数

DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' db_name() ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans
SELECT @Counter = @Counter 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ' db_name() ' LOG is '
CONVERT(VARCHAR(30),size) ' 8K pages or '
CONVERT(VARCHAR(30),(size*8/1024)) 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
8、表达:退换某些表
exec sp_changeobjectowner 'tablename','dbo'
9、存款和储蓄更换全部表
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner '.' rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO

  --- 成立 备份数据的 device

4、表达:创制新表

select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like ‘%表名%’

10、SQL SE锐界VEEscort中一贯循环写入数据
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i 1
end
案例:
就像下表,必要就裱中存有沒有及格的成績,在历次增長0.1的基礎上,使他們剛好及格:
Name score
Zhangshan 80
Lishi 59
Wangwu 50
Songquan 69
while((select min(score) from tb_table)<60)
begin
update tb_table set score =score*1.01
where score<60
if (select min(score) from tb_table)>60
break
else
continue
end

  USE master

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 

–4:查看当前数据库中负有存款和储蓄进程

数量开采-卓绝

  EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'

依据已有个别表创制新表:
A:create table tab_new like tab_old (使用旧表制造新表)
B:create table tab_new as select col1,col2… from tab_old definition only

select name as 存款和储蓄进程名称 from sysobjects where xtype=’P’

1.按姓氏笔画排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //从少到多
2.数据库加密:
select encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--同样;不然不一样encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--同样;不然分歧等
3.取回表中字段:
declare @list varchar(1000),
@sql nvarchar(1000)
select @list=@list ',' b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set @sql='select ' right(@list,len(@list)-1) ' from 表A'
exec (@sql)
4.翻看硬盘分区:
EXEC master..xp_fixeddrives
5.相比较A,B表是还是不是等于:

  --- 开始 备份

 

–5:查询用户创设的具有数据库

if (select checksum_agg(binary_checksum(*)) from A)

(select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'
6.杀掉全体的风浪探察器进度:
DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill ' RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'
7.记录搜索:
开头到N条记录

  BACKUP DATABASE pubs TO testBack

5、表达:删除新表

select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name=’sa’)

Select Top N * From 表

N到M条记录(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by

  4、表达:成立新表

drop table tabname 

或者

ID Desc

N到终极记录
Select Top N * From 表 Order by ID Desc
案例
举例1:一张表有30000多条记下,表的率先个字段 RecID 是自增进字段, 写一个SQL语句, 搜索表的第31到第四十个记录。
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 recid from 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 @s
9:获取当前数据库中的全数用户表
select Name from sysobjects where xtype='u' and status>=0
10:获取某三个表的装有字段
select name from syscolumns where id=object_id('表名')
select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')
三种办法的法力等同
11:查看与某二个表相关的视图、存款和储蓄进度、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text 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..sysdatabases where sid <> 0x01
14:查询某三个表的字段和数据类型
select column_name,data_type from information_schema.columns
where table_name = '表名'
15:不一样服务器数据库之间的多寡操作
--创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQ英雄联盟EDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '
--查询示例
select * from ITSV.数据库名.dbo.表名
--导入示例
select * into 表 from ITSV.数据库名.dbo.表名
--今后不再利用时去除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins '

--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset
--查询示例
select * from openrowset( 'SQ英雄联盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--生花费地球表面
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--把本地球表面导入远程表
insert openrowset( 'SQ英雄联盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表
--更新本地球表面
update b
set b.列A=a.列A
from openrowset( 'SQ英雄联盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地球表面 b
on a.column1=b.column1
--openquery用法必要成立三个连连
--首先创造三个再三再四创造链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQ英雄订盟EDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把地面表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地球表面
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地球表面导入远程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名
select * from 本地表
SQL Server基本函数
SQL Server基本函数
1.字符串函数 长度与分析用
1,datalength(Char_expr) 重临字符串包括字符数,但不蕴涵后边的空格
2,substring(expression,start,length) 取子串,字符串的下标是从“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, 'NULL'
6,set nocount {on|off}
使重返的结果中不含有关于受 Transact-SQL 语句影响的行数的信息。如果存款和储蓄进度中隐含的一部分话语并不回来多数实在的数量,则该装置由于大批量精减了网络流量,由此可眼看加强质量。SET NOCOUNT 设置是在实践或运行时设置,并不是在条分缕析时设置。
SET NOCOUNT 为 ON 时,不回来计数(表示受 Transact-SQL 语句影响的行数)。
SET NOCOUNT 为 OFF 时,再次回到计数
常识

在SQL查询中:from后最多能够跟多少张表或视图:256
在SQL语句中冒出 Order by,查询时,先排序,后取
在SQL中,三个字段的最大容积是八千,而对于nvarchar(四千),由于nvarchar是Unicode码。

SQLServer三千同步复制才具完结步骤
一、 预备职业
1.宣布服务器,订阅服务器都制造一个同名的windows用户,并安装一样的密码,做为公布快速照相文件夹的平价访问用户
--管理工科具
--Computer管理
--用户和组
--右键用户
--新建用户
--创立贰个直属于administrator组的登入windows的用户(SynUser)
2.在发表服务器上,新建二个分享目录,做为公布的快速照相文件的贮存目录,操作:
本身的管理器--D: 新建一个目录,名称叫: PUB
--右键这些新建的目录
--属性--共享
--选取"分享该文件夹"
--通过"权限"按纽来设置具体的用户权限,保险第一步中开创的用户(SynUser) 具有对该公文夹的具备权力

--确定
3.设置SQL代理(SQLSETiguanVERAGENT)服务的启航用户(发表/订阅服务器均做此设置)
始发--程序--处理工科具--服务
--右键SQLSERVERAGENT
--属性--登陆--选择"此账户"
--输入或许选用第一步中创立的windows登入用户名(SynUser)
--"密码"中输入该用户的密码
4.安装SQL Server身份验证形式,消除连接时的权杖难题(发表/订阅服务器均做此设置)
商铺处理器
--右键SQL实例--属性
--安全性--身份验证
--选择"SQL Server 和 Windows"
--确定
5.在颁发服务器和订阅服务器上互相注册
百货店管理器
--右键SQL Server组
--新建SQL Server注册...
--下一步--可用的服务器中,输入你要登记的中远距离服务器名 --增多
--下一步--连接使用,选择第一个"SQL Server身份验证"
--下一步--输入用户名和密码(SynUser)
--下一步--采纳SQL Server组,也得以创制贰个新组
--下一步--完成
6.对于只可以用IP,不可能用Computer名的,为其登记服务器别称(此步在实行中没用到)
(在连接端配置,比如,在订阅服务器上配备来讲,服务器名称中输入的是揭露服务器的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)单击[下一步]系统要求内定可以订阅该公告的数据库服务器类型,
SQLSE翼虎VE奥迪Q5允许在不一样的数据库如 orACLE或ACCESS之间张开数据复制。
不过在此地咱们选择运营"SQL SE昂CoraVE安德拉 两千"的数据库服务器
(5)单击[下一步]系统就弹出多个定义作品的对话框也正是采纳要出版的表
当心: 借使前边选用了业务公布 则再这一步中不得不选用带有主键的表
(6)选用发布名称和描述
(7)自定义公布属性 向导提供的精选:
是 笔者将自定义数据筛选,启用无名氏订阅和或另外自定义属性
否 遵照钦命情势创立发布 (提出使用自定义的办法)
(8)[下一步] 选拔筛选发布的章程
(9)[下一步] 能够挑选是或不是同意佚名订阅
1)借使选取具名订阅,则须要在公布服务器上增添订阅服务器
方法: [工具]->[复制]->[布署公布、订阅服务器和散发的习性]->[订阅服务器] 中添加
要不在订阅服务器上呼吁订阅时会出现的唤醒:改宣布不容许佚名订阅
一旦如故须求无名订阅则用以下消除办法
[供销合作社处理器]->[复制]->[发布内容]->[属性]->[订阅选项] 选择允许无名氏诉求订阅
2)假设选用无名氏订阅,则安顿订阅服务器时不会现出上述提醒
(10)[下一步] 设置快速照相 代理程序调解
(11)[下一步] 完结陈设
当成功出版物的始建后成立出版物的数据库也就改为了一个分享数据库
有数据
srv1.库名..author有字段:id,name,phone,
srv2.库名..author有字段:id,name,telphone,adress

要求:
srv1.库名..author扩大记录则srv1.库名..author记录扩展
srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新
--*/

--大约的拍卖步骤
--1.在 srv1 上创制连接服务器,以便在 srv1 中操作 srv2,完结联机
exec sp_addlinkedserver 'srv2','','SQ英雄结盟EDB','srv2的sql实例名或ip'
exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密码'
go
--2.在 srv1 和 srv2 这两台计算机中,运维msdtc(布满式事务管理服务),并且安装为自动运转
。小编的微处理器--调整面板--管理工科具--服务--右键 Distributed Transaction Coordinator--属性--运营--并将起动项目设置为电动运营
go

--然后成立三个功课定期调用地方的一块管理存款和储蓄进程就行了

信用合作社管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"接纳实行命令的数据库
--"命令"中输入要实行的口舌: exec p_process
--确定
--"调度"项
--新建调治
--"名称"中输入调治名称
--"调整项目"中挑选你的功课实施安排
--假如选拔"每每出现"
--点"改换"来安装你的时间安排

然后将SQL Agent服务运行,并安装为自动运行,不然你的学业不会被实践

安装情势:
自个儿的微机--调节面板--管理工科具--服务--右键 SQLSE奥迪Q3VERAGENT--属性--运转项目--采纳"自动运行"--明显.

--3.完成联机管理的方法2,定时同步

--在srv第11中学创设如下的联手管理存款和储蓄进程
create proc p_process
as
--更新修改过的数据
update b set name=i.name,telphone=i.telphone
from srv2.库名.dbo.author b,author i
where 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 i
where not exists(
select * from srv2.库名.dbo.author where id=i.id)

--删除已经删除的数量(即使须求的话)
delete b
from srv2.库名.dbo.author b
where not exists(
select * from author where id=b.id)
go

  create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

6、表达:扩张一个列

select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

  依照已有的表创造新表:

Alter table tabname add column col type 

–6:查询某二个表的字段和数据类型

  A:create table tab_new like tab_old (使用旧表创立新表)

注:列增添后将不可能去除。DB第22中学列加上后数据类型也不可能退换,独一能改造的是充实varchar类型的长短。

select column_name,data_type from information_schema.columns 
where table_name = ‘表名’

  B:create table tab_new as select col1,col2… from tab_old definition only

 

–7:获得表字段的叙说 
select name, 
(select value from sysproperties where id = syscolumns.id and smallid=syscolumns.colid) as 描述 
from syscolumns where id=object_id(‘表名’)

  5、表达:删除新表

7、表达:增添主键:

 

  drop table tabname

Alter table tabname add primary key(col) 

1、表达:创制数据库

  6、表达:扩张一个列

申明:删除主键:

  CREATE DATABASE database-name

  Alter table tabname add column col type

Alter table tabname drop primary key(col) 

  2、表明:删除数据库

  注:列扩大后将无法去除。DB第22中学列加上后数据类型也不能够改换,独一能改造的是扩展varchar类型的尺寸。

8、表达:创造索引:

  drop database dbname

  7、表达:增加主键: Alter table tabname add primary key(col)

create [unique] index idxname on tabname(col….) 

  3、说明:备份sql server

  表明:删除主键: Alter table tabname drop primary key(col)

剔除索引:

  --- 成立 备份数据的 device

  8、表明:成立索引:create [unique] index idxname on tabname(col….)

drop index idxname 

  USE master

  删除索引:drop index idxname

注:索引是不行改换的,想改造必须删除重新建。

  EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'

  注:索引是不行更改的,想更动必须删除重新建。

9、表达:创造视图:

  --- 开始 备份

  9、表明:创造视图:create view viewname as select statement

create view viewname as select statement 

  BACKUP DATABASE pubs TO testBack

  删除视图:drop view viewname

除去视图:

  4、表达:创立新表

  10、表达:多少个大约的主干的sql语句

drop view viewname 

  create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

  选择:select * from table1 where 范围

10、表达:几个简易的着力的sql语句

  依照已有的表创造新表:

  插入:insert into table1(field1,field2) values(value1,value2)

澳门新萄京官方网站 1)

  A:create table tab_new like tab_old (使用旧表创制新表)

  删除:delete from table1 where 范围

选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1 

  B:create table tab_new as select col1,col2… from tab_old definition only

  更新:update table1 set field1=value1 where 范围

澳门新萄京官方网站 2)

  5、表达:删除新表

  查找:select * from table1 where 田野先生1 like ’%value1%’ ---like的语法很精密,查资料!

 

  drop table tabname

  排序:select * from table1 order by field1,field2 [desc]

11、表明:多少个高端查询运算词
A: UNION 运算符
UNION 运算符通过整合别的四个结果表(例如 TABLE1 和 TABLE2)并消去表中别的重复行而派生出一个结实表。当 ALL 随 UNION 一齐行使时(即 UNION ALL),不清除重复行。三种状态下,派生表的每一行不是出自 TABLE1 正是发源 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过富含持有在 TABLE1 中但不在 TABLE2中的行并消除全部重复行而派生出二个结出表。当 ALL 随 EXCEPT 一齐使用时 (EXCEPT ALL),不拔除重复行。
C: INTERSECT 运算符
INTE传祺SECT 运算符通过只囊括 TABLE1 和 TABLE第22中学都有的行并解决全数重复行而派生出三个结果表。当 ALL 随 INTE本田UR-VSECT 一齐利用时 (INTE昂科雷SECT ALL),不免除重复行。
注:使用运算词的多少个查询结果行必须是一律的。

  6、表明:扩充一个列

  总数:select count as totalcount from table1

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.c
B:right (outer) join:
右外连接(右连接):结果集既包涵连接表的相配连接行,也包括右连接表的具备行。
C:full/cross (outer) join:
全外连接:不止包罗符号连接表的相称行,还包蕴五个再三再四表中的全体记录。

  Alter table tabname add column col type

  求和:select sum(field1) as sumvalue from table1

12、分组:Group by:
   一张表,一旦分组 完结后,查询后只能获得组相关的音讯。
    组相关的新闻:(总括消息) count,sum,max,min,avg  分组的规范)
    在SQLServer中分组时:不能够以text,ntext,image类型的字段作为分组依赖
   在selecte总括函数中的字段,不可能和一般性的字段放在一块儿;

  注:列扩展后将无法去除。DB第22中学列加上后数据类型也不能更动,独一能更动的是增添varchar类型的尺寸。

  平均:select avg(field1) as avgvalue from table1

13、对数据库实行操作:
   分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接评释,附加须求总体的路线名
14.什么修改数据库的称号:
sp_renamedb 'old_name', 'new_name'

  7、表达:增添主键: Alter table tabname add primary key(col)

  最大:select max(field1) as maxvalue from table1

 

  表达:删除主键: Alter table tabname drop primary key(col)

  最小:select min(field1) as minvalue from table1

二、提升
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1(仅用于SQlServer)
法二:select top 0 * into b from a

  8、表达:创设索引:create [unique] index idxname on tabname(col….)

  11、表明:多少个高端查询运算词

2、表达:拷贝表(拷贝数据,源表名:a 目的表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;

  删除索引:drop index idxname

  A: UNION 运算符

3、表达:跨数据库之间表的正片(具体多少利用相对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"' where..

  注:索引是不足更动的,想改换必须删除重新建。

  UNION 运算符通过结合别的七个结实表(譬喻 TABLE1 和 TABLE2)并消去表中别的重复行而派生出一个结出表。当 ALL 随 UNION 一同使用时(即 UNION ALL),不消除重复行。三种景况下,派生表的每一行不是缘于 TABLE1 就是缘于 TABLE2。

4、说明:子查询(表名1:a 表名2:b)
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)

  9、表达:创造视图:create view viewname as select statement

  B: EXCEPT 运算符

5、表明:展现小说、提交人和尾声回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

  删除视图:drop view viewname

  EXCEPT 运算符通过包涵富有在 TABLE1 中但不在 TABLE2中的行并消除全部重复行而派生出贰个结果表。当 ALL 随 EXCEPT 一齐利用时 (EXCEPT ALL),不免除重复行。

6、表明:外接连查询(表名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.c

  10、表明:多少个大约的中央的sql语句

  C: INTERSECT 运算符

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

  选择:select * from table1 where 范围

  INTE福睿斯SECT 运算符通过只囊括 TABLE1 和 TABLE第22中学都有个别行并解决全部重复行而派生出多少个结出表。当 ALL 随 INTEPRADOSECT 一齐使用时 (INTECR-VSECT ALL),不化解重复行。

8、表达:between的用法,between限制查询数据范围时包括了边界值,not between不满含
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2

  插入:insert into table1(field1,field2) values(value1,value2)

  注:使用运算词的多少个查询结果行必须是平等的。

9、表明:in 的行使办法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

  删除:delete from table1 where 范围

  12、表明:使用外接连

10、表达:两张关联表,删除主表中早已在副表中从不的音讯
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

  更新:update table1 set field1=value1 where 范围

  A、left (outer) join:

11、表明:四表联合检查难点:
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 .....

  查找:select * from table1 where 田野1 like ’%value1%’ ---like的语法很精美,查资料!

  左外连接(左连接):结果集几囊括连接表的匹配行,也包蕴左连接表的全部行。

12、表达:日程陈设超前五分钟提示
SQL: select * from 日程布署 where datediff('minute',f开首时间,getdate())>5

  排序:select * from table1 order by field1,field2 [desc]

  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

13、表达:一条sql 语句化解数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
实际达成:
至于数据库分页:
  declare @start int,@end int
  @sql  nvarchar(600)
  set @sql=’select top’ str(@end-@start 1) ’ from T where rid not in(select top’ str(@str-1) ’Rid from T where Rid>-1)’
  exec sp_executesql @sql

  总数:select count as totalcount from table1

  B:right (outer) join:

瞩目:在top后不可能一贯跟二个变量,所以在实际上利用中独有那样的拓展出格的管理。Rid为多少个标志列,若是top后还应该有具体的字段,这样做是万分有裨益的。因为那样能够制止top的字段尽管是逻辑索引的,查询的结果后实际表中的不等同(逻辑索引中的数据有希望和数量表中的不一样等,而查询时一旦处在索引则率先查询索引)

  求和:select sum(field1) as sumvalue from table1

  右外接连(右连接):结果集既富含连接表的相配连接行,也囊括右连接表的具有行。

14、说明:前10条记录
select top 10 * form table1 where 范围

  平均:select avg(field1) as avgvalue from table1

  C:full/cross (outer) join:

15、表达:选取在每一组b值一样的数量中对应的a最大的记录的拥有音讯(类似那样的用法能够用来论坛每月排名榜,每月抢手产品深入分析,按学科战绩排行,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

  最大:select max(field1) as maxvalue from table1

  全外连接:不仅仅富含符号连接表的相称行,还包涵八个再三再四表中的全数记录。

16、表明:包涵持有在 TableA 中但不在 TableB和TableC 中的行并化解全部重复行而派生出一个结实表
(select a from tableA ) except (select a from tableB) except (select a from tableC)

  最小:select min(field1) as minvalue from table1

  12、分组:Group by:

17、表达:随机抽取10条数据
select top 10 * from tablename order by newid()

  11、说明:多少个高档查询运算词

  一张表,一旦分组 完结后,查询后只好获得组相关的音讯。

18、表明:随机选用记录
select newid()

  A: UNION 运算符

  组相关的音讯:(总计音讯) count,sum,max,min,avg 分组的正儿八经)

19、表明:删除重复记录
1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
2),select distinct * into temp from tablename
  delete from tablename
  insert into tablename select * from temp
评价: 这种操作牵连大气的数量的移动,这种做法不相符大体积但数量操作
3),比如:在四个外表表中程导弹入数据,由于某个原因首先次只导入了一有的,但很难剖断具体地点,那样唯有在下三次全体导入,那样也就时有发生非常多双重的字段,如何删除重复字段
alter table tablename
--增多二个自增列
add  column_b int identity(1,1)
delete from tablename where column_b not in(
select max(column_b)  from tablename group by column1,column2,...)
alter table tablename drop column column_b

  UNION 运算符通过结合其余多个结果表(举例 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一同使用时(即 UNION ALL),不消除重复行。三种景况下,派生表的每一行不是根源 TABLE1 就是来源于 TABLE2。

  在SQLServer中分组时:不能够以text,ntext,image类型的字段作为分组依赖

20、表明:列出数据Curry有所的表名
select name from sysobjects where type='U' // U代表用户

  B: EXCEPT 运算符

  在selecte总结函数中的字段,不可能和平日的字段放在一齐;

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

  EXCEPT 运算符通过包涵具有在 TABLE1 中但不在 TABLE2中的行并消除全体重复行而派生出贰个结果表。当 ALL 随 EXCEPT 一齐利用时 (EXCEPT ALL),不排除重复行。

  13、对数据库进行操作:

22、表明:列示type、vender、pcs字段,以type字段排列,case能够一本万利地促成多种选用,类似select 中的case。
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
展现结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3

  C: INTERSECT 运算符

  分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加须求总体的路线名

23、说明:起首化表table1
TRUNCATE TABLE table1

  INTETucsonSECT 运算符通过只囊括 TABLE1 和 TABLE第22中学都局地行并消除全体重复行而派生出一个结出表。当 ALL 随 INTECR-VSECT 一同使用时 (INTE福特ExplorerSECT ALL),不解决重复行。

  14.哪些修改数据库的名目:

24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

  注:使用运算词的多少个查询结果行必须是一致的。

  sp_renamedb 'old_name', 'new_name'

 

  12、表明:使用外接连

  二、提升

三、技巧
1、1=1,1=2的利用,在SQL语句组合时用的很多
“where 1=1” 是表示选择一切    “where 1=2”全体不选,
如:
if @strWhere !=''
begin
set @strSQL = 'select count(*) as Total from [' @tblName '] where ' @strWhere
end
else
begin
set @strSQL = 'select count(*) as Total from [' @tblName ']'
end
我们得以一贯写成
不当!未找到目录项。
set @strSQL = 'select count(*) as Total from [' @tblName '] where 1=1 安定 ' @strWhere 2、减少数据库
--重新建立索引
DBCC REINDEX
DBCC INDEXDEFRAG
--减弱数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE

  A、left (outer) join:

  1、表明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

3、压缩数据库
dbcc shrinkdatabase(dbname)

  左外连接(左连接):结果集几席卷连接表的相称行,也席卷左连接表的兼具行。

  法一:select * into b from a where 1<>1(仅用于SQlServer)

4、转移数据库给新用户以已存在用户权限
exec sp_change_users_login 'update_one','newname','oldname'
go

  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

  法二:select top 0 * into b from a

5、检查备份集
RESTORE VERIFYONLY from disk='E:dvbbs.bak'

  B:right (outer) join:

  2、表明:拷贝表(拷贝数据,源表名:a 指标表名:b) (Access可用)

6、修复数据库
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO

  右外接连(右连接):结果集既包蕴连接表的匹配连接行,也满含右连接表的富有行。

  insert into b(a, b, c) select d,e,f from b;

7、日志清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
SQL2008语句大全,sql语句大全。@MaxMinutes INT,
@NewSize INT

  C:full/cross (outer) join:

  3、表达:跨数据库之间表的正片(具体多少应用相对路线) (Access可用)

USE tablename -- 要操作的多少库名
SELECT  @LogicalFileName = 'tablename_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1  -- 你想设定的日志文件的高低(M)
Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' db_name() ' LOG is '
CONVERT(VARCHAR(30),@OriginalSize) ' 8K pages or '
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)

  全外连接:不仅仅囊括符号连接表的相配行,还富含八个一而再表中的全部记录。

  insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件

DECLARE @Counter    INT,
@StartTime DATETIME,
@TruncLog   VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' db_name() ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)  
AND (@OriginalSize * 8 /1024) > @NewSize  
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE   ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans
SELECT @Counter = @Counter 1
END
EXEC (@TruncLog)  
END
SELECT 'Final Size of ' db_name() ' LOG is '
CONVERT(VARCHAR(30),size) ' 8K pages or '
CONVERT(VARCHAR(30),(size*8/1024)) 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF

  12、分组:Group by:

  例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"' where..

8、表达:改动有个别表
exec sp_changeobjectowner 'tablename','dbo'

  一张表,一旦分组 完成后,查询后只可以获得组相关的音信。

  4、说明:子查询(表名1:a 表名2:b)

9、存款和储蓄更动全体表
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name    as NVARCHAR(128)
DECLARE @Owner   as NVARCHAR(128)
DECLARE @OwnerName   as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name'    = name,
   'Owner'    = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN   curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN     
if @Owner=@OldOwner
begin
   set @OwnerName = @OldOwner '.' rtrim(@Name)
   exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO

  组相关的音讯:(总计新闻) count,sum,max,min,avg 分组的正规)

  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)

10、SQL SEEscortVE凯雷德中一贯循环写入数据
declare @i int
set @i=1
while @i<30
begin
    insert into test (userid) values(@i)
    set @i=@i 1
end
案例:
有如下表,必要就裱中保有沒有及格的成績,在每一遍增長0.1的基礎上,使他們剛好及格:
    Name     score
    Zhangshan   80
    Lishi       59
    Wangwu      50
    Songquan    69
while((select min(score) from tb_table)<60)
begin
update tb_table set score =score*1.01
where score<60
if  (select min(score) from tb_table)>60
  break
else
    continue
end
多少开荒-杰出

  在SQLServer中分组时:无法以text,ntext,image类型的字段作为分组依靠

  5、表达:呈现小说、提交人和最后回复时间

1.按姓氏笔画排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //从少到多
2.数据库加密:
select encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--一样;不然不平等 encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--同样;不然不等同
3.取回表中字段:
declare @list varchar(1000),
@sql nvarchar(1000)
select @list=@list ',' b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set @sql='select ' right(@list,len(@list)-1) ' from 表A'
exec (@sql)
4.查看硬盘分区:
EXEC master..xp_fixeddrives
5.相比A,B表是不是等于:
if (select checksum_agg(binary_checksum(*)) from A)
     =
    (select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'
6.杀掉全体的风云探察器进度:
DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill ' RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'
7.记下寻找:
开头到N条记录

  在selecte总括函数中的字段,不能和平日的字段放在一块儿;

  select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

Select Top N * From 表

N到M条记录(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by

  13、对数据库实行操作:

  6、表明:外接连查询(表名1:a 表名2:b)

ID   Desc

N到终极记录
Select Top N * From 表 Order by ID Desc
案例
例如说1:一张表有三千0多条记下,表的第二个字段 RecID 是自拉长字段, 写一个SQL语句, 找寻表的第31到第叁二十个记录。
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 recid from 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  @s
9:获取当前数据库中的全数用户表
select Name from sysobjects where xtype='u' and status>=0
10:获取某三个表的兼具字段
select name from syscolumns where id=object_id('表名')
select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')
二种办法的成效等同
11:查看与某三个表相关的视图、存储进程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text 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..sysdatabases where sid <> 0x01
14:查询某二个表的字段和数据类型
select column_name,data_type from information_schema.columns
where table_name = '表名'
15:不相同服务器数据库之间的多少操作
--成立链接服务器
exec sp_addlinkedserver   'ITSV ', ' ', 'SQ英雄联盟EDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名 ', '密码 '
--查询示例
select * from ITSV.数据库名.dbo.表名
--导入示例
select * into 表 from ITSV.数据库名.dbo.表名
--未来不再采纳时去除链接服务器
exec sp_dropserver  'ITSV ', 'droplogins '
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset
--查询示例
select * from openrowset( 'SQ英雄联盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--生花费地球表面
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--把本地球表面导入远程表
insert openrowset( 'SQ英雄联盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表
--更新本地球表面
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地球表面 b
on a.column1=b.column1
--openquery用法需求创建八个三番两次
--首先创立贰个再三再四创制链接服务器
exec sp_addlinkedserver   'ITSV ', ' ', 'SQ英雄联盟EDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ')
--把本地球表面导入远程表
insert openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地球表面
update b
set b.列B=a.列B
FROM openquery(ITSV,  'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A
--3、opendatasource/openrowset
SELECT   *
FROM   opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地球表面导入远程表
insert opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名
select * from 本地表
SQL Server基本函数
SQL Server基本函数
1.字符串函数 长度与分析用
1,datalength(Char_expr) 再次来到字符串富含字符数,但不带有前面包车型客车空格
2,substring(expression,start,length) 取子串,字符串的下标是从“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, 'NULL'
6,set nocount {on|off}
使再次回到的结果中不包罗关于受 Transact-SQL 语句影响的行数的新闻。假使存款和储蓄进程中蕴涵的一对言语并不回来许多实际上的多寡,则该装置由于大气削减了网络流量,因此可眼看巩固质量。SET NOCOUNT 设置是在实践或运维时设置,实际不是在条分缕析时设置。
SET NOCOUNT 为 ON 时,不回去计数(表示受 Transact-SQL 语句影响的行数)。

SET NOCOUNT 为 OFF 时,重返计数
常识
在SQL查询中:from后最多能够跟多少张表或视图:256
在SQL语句中出现 Order by,查询时,先排序,后取
在SQL中,壹个字段的最大容积是七千,而对于nvarchar(陆仟),由于nvarchar是Unicode码。  
SQLServer三千同步复制技能完成步骤
一、 预备专门的学问
1.通知服务器,订阅服务器都创建三个同名的windows用户,并安装同样的密码,做为发表快速照相文件夹的实惠访问用户
--管理工具
--计算机管理
--用户和组
--右键用户
--新建用户
--构造建设一个隶属于administrator组的登入windows的用户(SynUser)
2.在颁发服务器上,新建多个分享目录,做为揭橥的快速照相文件的存放目录,操作:
自家的Computer--D: 新建二个索引,名称为: PUB
--右键那一个新建的目录
--属性--共享
--接纳"共享该文件夹"
--通过"权限"按纽来设置具体的用户权限,保险第一步中创建的用户(SynUser) 具备对该公文夹的具有权力
--确定
3.安装SQL代理(SQLSE传祺VERAGENT)服务的启航用户(发布/订阅服务器均做此设置)
开首--程序--管理工科具--服务
--右键SQLSERVERAGENT
--属性--登陆--选择"此账户"
--输入大概采用第一步中开创的windows登陆用户名(SynUser)
--"密码"中输入该用户的密码
4.安装SQL Server身份验证形式,搞定连接时的权限难题(发表/订阅服务器均做此设置)
同盟社管理器
--右键SQL实例--属性
--安全性--身份验证
--选择"SQL Server 和 Windows"
--确定
5.在宣布服务器和订阅服务器上相互注册
供销合作社管理器
--右键SQL Server组
--新建SQL Server注册...
--下一步--可用的服务器中,输入你要注册的长途服务器名 --增加
--下一步--连接使用,选取第1个"SQL Server身份验证"
--下一步--输入用户名和密码(SynUser)
--下一步--选拔SQL Server组,也能够创立贰个新组
--下一步--完成
6.对于只好用IP,不能够用Computer名的,为其注册服务器小名(此步在实行中没用到)
(在连接端配置,比方,在订阅服务器上安插来讲,服务器名称中输入的是宣布服务器的IP)
始发--程序--Microsoft SQL Server--客户端网络实用工具
--别名--添加
--网络库选用"tcp/ip"--服务器外号输入SQL服务器名
--连接参数--服务器名称中输入SQL服务器ip地址
--假若您改改了SQL的端口,撤消选拔"动态调节端口",并输入相应的端口号
二、 正式配置
1、配置宣布服务器
开采公司管理器,在宣布服务器(B、C、D)上施行以下步骤:
SQL2008语句大全,sql语句大全。(1) 从[工具]下拉菜单的[复制]子菜单中精选[布置公布、订阅服务器和分发]并公布局发布和分发向导
(2) [下一步] 采纳分发服务器 能够选择把公布服务器本身看成分发服务器大概别的sql的服务器(选择自个儿)
(3) [下一步] 设置快速照相文件夹
动用暗许\servernamePub
(4) [下一步] 自定义配置
能够挑选:是,让笔者设置分发数据库属性启用发表服务器或安装发表设置
否,使用下列默许设置(推荐)
(5) [下一步] 设置分发数据库名称和地点 采纳暗中同意值
(6) [下一步] 启用发表服务器 选拔作为发表的服务器
(7) [下一步] 选用供给公布的数据库和揭露项目
(8) [下一步] 选用注册订阅服务器
(9) [下一步] 完结布局
2、成立出版物
透露服务器B、C、D上
(1)从[工具]菜单的[复制]子菜单中挑选[创设和管制公布]命令
(2)采取要开再次创下版物的数据库,然后单击[成立宣布]
(3)在[创制公布起首]的唤起对话框中单击[下一步]系统就能够弹出三个对话框。对话框上的从头到尾的经过是复制的八个体系。我们明日选第八个相当于暗中认可的快速照相公布(其余八个大家能够去拜望辅助)
(4)单击[下一步]系统要求钦点能够订阅该文告的数据库服务器类型,
SQLSE本田UR-VVEEnclave允许在差异的数据库如 orACLE或ACCESS之间展开数据复制。
不过在此间我们选拔运转"SQL SE中华VVELacrosse 三千"的数据库服务器
(5)单击[下一步]系统就弹出三个定义小说的对话框也便是选拔要出版的表
留心: 要是前方选取了作业发布 则再这一步中不得不选取带有主键的表
(6)接纳公布名称和陈述
(7)自定义公布属性 向导提供的选料:
是 小编将自定义数据筛选,启用佚名订阅和或任何自定义属性
否 根据钦定格局创立公布 (提出采取自定义的主意)
(8)[下一步] 选用筛选发表的措施
(9)[下一步] 能够选用是还是不是同意无名氏订阅
1)借使选择签字订阅,则供给在布告服务器上增加订阅服务器
方法: [工具]->[复制]->[布署宣布、订阅服务器和分发的性情]->[订阅服务器] 中添加
不然在订阅服务器上呼吁订阅时会出现的提示:改宣布分歧意匿名订阅
假定还是需求无名氏订阅则用以下化解办法
[厂家处理器]->[复制]->[宣布内容]->[属性]->[订阅选项] 选取允许无名诉求订阅
2)借使采纳佚名订阅,则配备订阅服务器时不会并发上述提醒
(10)[下一步] 设置快速照相 代理程序调节
(11)[下一步] 完结布署
当成功出版物的始建后创立出版物的数据库也就成为了一个分享数据库
有数据
srv1.库名..author有字段:id,name,phone,
srv2.库名..author有字段:id,name,telphone,adress
要求:
srv1.库名..author扩充记录则srv1.库名..author记录扩大
srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新
--*/
--大概的拍卖步骤
--1.在 srv1 上开创连接服务器,以便在 srv1 中操作 srv2,实现共同
exec sp_addlinkedserver 'srv2','','SQ英雄联盟EDB','srv2的sql实例名或ip'
exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密码'
go
--2.在 srv1 和 srv2 这两台Computer中,运营msdtc(布满式事务管理服务),并且安装为机关运营
。小编的计算机--调整面板--管理工科具--服务--右键 Distributed Transaction Coordinator--属性--运转--并将起动项目设置为自动运行
go
--然后创设二个作业定期调用地方的联合管理存款和储蓄进程就行了
商家管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选用施行命令的数据库
--"命令"中输入要施行的话语: exec p_process
--确定
--"调度"项
--新建调解
--"名称"中输入调整名称
--"调治项目"中甄选你的课业实行布置
--即便选取"频频出现"
--点"改动"来安装你的岁月布署
然后将SQL Agent服务运营,并安装为自动运转,不然你的学业不会被奉行
安装方法:
本身的微型计算机--调整面板--管理工科具--服务--右键 SQLSE揽胜极光VERAGENT--属性--运转项目--选用"自动运转"--明确.
--3.兑现同步管理的方法2,定期同步
--在srv第11中学创制如下的同台管理存款和储蓄进度
create proc p_process
as
--更新修改过的数码
update b set name=i.name,telphone=i.telphone
from srv2.库名.dbo.author b,author i
where 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 i
where not exists(
select * from srv2.库名.dbo.author where id=i.id)
--删除已经去除的数据(假如须求的话)
delete b
from srv2.库名.dbo.author b
where not exists(
select * from author where id=b.id)
go

  分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接注明,附加须求完整的路线名

  select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

  14.怎么修改数据库的名称:

  7、表达:在线视图查询(表名1:a )

  sp_renamedb 'old_name', 'new_name'

  select * from (SELECT a,b,c FROM a) T where t.a > 1;

  二、提升

  8、表达:between的用法,between限制查询数据范围时包含了边界值,not between不包含

  1、表达:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

  select * from table1 where time between time1 and time2

  法一:select * into b from a where 1<>1(仅用于SQlServer)

  select a,b,c, from table1 where a not between 数值1 and 数值2

  法二:select top 0 * into b from a

  9、表明:in 的行使格局

  2、表明:拷贝表(拷贝数据,源表名:a 目的表名:b) (Access可用)

  select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

  insert into b(a, b, c) select d,e,f from b;

  10、表明:两张关联表,删除主表中早就在副表中从不的音讯

  3、表达:跨数据库之间表的正片(具体数目利用相对路线) (Access可用)

  delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

  insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件

  11、表明:四表联合检查难点:

  例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"' where..

  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 .....

  4、说明:子查询(表名1:a 表名2:b)

  12、表达:日程安插提早五分钟指示

  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)

  SQL: select * from 日程安顿 where datediff('minute',f开端时间,getdate())>5

  5、表达:显示文章、提交人和末段回复时间

  13、表明:一条sql 语句化解数据库分页

  select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

  select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

  6、表明:外接连查询(表名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.c

  关于数据库分页:

  7、表明:在线视图查询(表名1:a )

  declare @start int,@end int

  select * from (SELECT a,b,c FROM a) T where t.a > 1;

  @sql nvarchar(600)

  8、表明:between的用法,between限制查询数据范围时满含了边界值,not between不包涵

  set @sql=’select top’ str(@end-@start 1) ’ from T where rid not in(select top’ str(@str-1) ’Rid from T where Rid>-1)’

  select * from table1 where time between time1 and time2

  exec sp_executesql @sql

  select a,b,c, from table1 where a not between 数值1 and 数值2

  注意:在top后不可能直接跟贰个变量,所以在骨子里行使中唯有如此的开始展览非常规的拍卖。Rid为贰个标志列,若是top后还会有具体的字段,那样做是可怜有补益的。因为如此能够免止top的字段借使是逻辑索引的,查询的结果后实在表中的不等同(逻辑索引中的数据有希望和多少表中的差别等,而查询时一旦处在索引则率先查询索引)

  9、表明:in 的接纳方式

  14、说明:前10条记录

  select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

  select top 10 * form table1 where 范围

  10、说明:两张关联表,删除主表中早就在副表中并未有的信息

  15、表达:选择在每一组b值一样的数目中对应的a最大的记录的有所新闻(类似那样的用法能够用来论坛每月排名榜,每月热销产品剖析,按学科战绩排行,等等.)

  delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

  select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

  11、表达:四表联合检查难题:

  16、表达:包罗富有在 TableA 中但不在 TableB和TableC 中的行并化解全数重复行而派生出二个结实表

  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 .....

  (select a from tableA ) except (select a from tableB) except (select a from tableC)

  12、表明:日程布署提早六分钟提醒

  17、表达:随机抽取10条数据

  SQL: select * from 日程布署 where datediff('minute',f开端时间,getdate())>5

  select top 10 * from tablename order by newid()

  13、表达:一条sql 语句消除数据库分页

  18、表达:随机选取记录

  select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

  select newid()

  具体落到实处:

  19、表明:删除重复记录

  关于数据库分页:

  1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

  declare @start int,@end int

  2),select distinct * into temp from tablename

  @sql nvarchar(600)

  delete from tablename

  set @sql=’select top’ str(@end-@start 1) ’ from T where rid not in(select top’ str(@str-1) ’Rid from T where Rid>-1)’

  insert into tablename select * from temp

  exec sp_executesql @sql

  评价: 这种操作牵连大气的数量的位移,这种做法不符合大容积但数据操作

  注意:在top后不能够直接跟多少个变量,所以在实质上采纳中独有这么的展开超过常规规的管理。Rid为叁个标志列,借使top后还大概有具体的字段,那样做是卓殊有实益的。因为这么能够制止top的字段假诺是逻辑索引的,查询的结果后其实表中的不等同(逻辑索引中的数占有非常大可能率和数量表中的区别等,而查询时一旦处在索引则率先查询索引)

  3),举例:在多少个表面表中程导弹入数据,由于有些原因首先次只导入了一片段,但很难剖断具体地点,这样只有在下贰次全部导入,这样也就产生众多再一次的字段,怎样删除重复字段

  14、说明:前10条记录

  alter table tablename

  select top 10 * form table1 where 范围

  --加多二个自增列

  15、表达:选取在每一组b值同样的数目中对应的a最大的笔录的保有新闻(类似那样的用法能够用于论坛每月排行的榜单,每月销路广产品分析,按学科成绩排名,等等.)

  add column_b int identity(1,1)

  select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

  delete from tablename where column_b not in(

  16、表明:包罗持有在 TableA 中但不在 TableB和TableC 中的行并化解全数重复行而派生出八个结果表

  select max(column_b) from tablename group by column1,column2,...)

  (select a from tableA ) except (select a from tableB) except (select a from tableC)

  alter table tablename drop column column_b

  17、表达:随机抽出10条数据

  20、表达:列出数据库里存有的表名

  select top 10 * from tablename order by newid()

  select name from sysobjects where type='U' // U代表用户

  18、表明:随机采用记录

  21、表达:列出表里的装有的列名

  select newid()

  select name from syscolumns where id=object_id('TableName')

  19、表达:删除重复记录

  22、表明:列示type、vender、pcs字段,以type字段排列,case能够平价地贯彻多种选取,类似select 中的case。

  1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

  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

  2),select distinct * into temp from tablename

  展现结果:

  delete from tablename

  type vender pcs

  insert into tablename select * from temp

  电脑 A 1

  评价: 这种操作牵连大气的数指标移位,这种做法不相符大体积但数量操作

  电脑 A 1

  3),比如:在三个外表表中程导弹入数据,由于有些原因首先次只导入了一有个别,但很难剖断具体地方,那样独有在下二遍全部导入,那样也就生出过多种复的字段,如何删除重复字段

  光盘 B 2

  alter table tablename

  光盘 A 2

  --增多三个自增列

  手机 B 3

  add column_b int identity(1,1)

  手机 C 3

  delete from tablename where column_b not in(

  23、表明:开端化表table1

  select max(column_b) from tablename group by column1,column2,...)

  TRUNCATE TABLE table1

  alter table tablename drop column column_b

  24、说明:选择从10到15的记录

  20、表明:列出数据Curry有所的表名

  select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

  select name from sysobjects where type='U' // U代表用户

  三、技巧

  21、表达:列出表里的有着的列名

  1、1=1,1=2的施用,在SQL语句组合时用的比较多

  select name from syscolumns where id=object_id('TableName')

  “where 1=1” 是象征选拔一切 “where 1=2”全体不选,

  22、表达:列示type、vender、pcs字段,以type字段排列,case能够一本万利地达成多种选择,类似select 中的case。

  如:

  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

  if @strWhere !=''

  突显结果:

  begin

  type vender pcs

  set @strSQL = 'select count(*) as Total from [' @tblName '] where ' @strWhere

  电脑 A 1

  end

  电脑 A 1

  else

  光盘 B 2

  begin

  光盘 A 2

  set @strSQL = 'select count(*) as Total from [' @tblName ']'

  手机 B 3

  end

  手机 C 3

  大家得以一向写成

  23、表明:早先化表table1

  错误!未找到目录项。

  TRUNCATE TABLE table1

  set @strSQL = 'select count(*) as Total from [' @tblName '] where 1=1 安定 ' @strWhere 2、减弱数据库

  24、说明:选择从10到15的记录

  --重新建构索引

  select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

  DBCC REINDEX

  三、技巧

  DBCC INDEXDEFRAG

  1、1=1,1=2的施用,在SQL语句组合时用的比较多

  --减少数据和日志

  “where 1=1” 是意味着选取一切 “where 1=2”全体不选,

  DBCC SHRINKDB

  如:

  DBCC SHRINKFILE

  if @strWhere !=''

  3、压缩数据库

  begin

  dbcc shrinkdatabase(dbname)

  set @strSQL = 'select count(*) as Total from [' @tblName '] where ' @strWhere

  4、转移数据库给新用户以已存在用户权限

  end

  exec sp_change_users_login 'update_one','newname','oldname'

  else

  go

  begin

  5、检查备份集

  set @strSQL = 'select count(*) as Total from [' @tblName ']'

  RESTORE VERIFYONLY from disk='E:dvbbs.bak'

  end

  6、修复数据库

  我们可以一贯写成

  ALTER DATABASE [dvbbs] SET SINGLE_USER

  错误!未找到目录项。

  GO

  set @strSQL = 'select count(*) as Total from [' @tblName '] where 1=1 安定 ' @strWhere 2、收缩数据库

  DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK

  --重新建立索引

  GO

  DBCC REINDEX

  ALTER DATABASE [dvbbs] SET MULTI_USER

  DBCC INDEXDEFRAG

  GO

  --减少数据和日志

  7、日志清除

  DBCC SHRINKDB

  SET NOCOUNT ON

  DBCC SHRINKFILE

  DECLARE @LogicalFileName sysname,

  3、压缩数据库

  @MaxMinutes INT,

  dbcc shrinkdatabase(dbname)

  @NewSize INT

  4、转移数据库给新用户以已存在用户权限

  USE tablename -- 要操作的数据库名

  exec sp_change_users_login 'update_one','newname','oldname'

  SELECT @LogicalFileName = 'tablename_log', -- 日志文件名

  go

  @MaxMinutes = 10, -- Limit on time allowed to wrap log.

  5、检查备份集

  @NewSize = 1 -- 你想设定的日志文件的轻重缓急(M)

  RESTORE VERIFYONLY from disk='E:dvbbs.bak'

  Setup / initialize

  6、修复数据库

  DECLARE @OriginalSize int

  ALTER DATABASE [dvbbs] SET SINGLE_USER

  SELECT @OriginalSize = size

  GO

  FROM sysfiles

  DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK

  WHERE name = @LogicalFileName

  GO

  SELECT 'Original Size of ' db_name() ' LOG is '

  ALTER DATABASE [dvbbs] SET MULTI_USER

  CONVERT(VARCHAR(30),@OriginalSize) ' 8K pages or '

  GO

  CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) 'MB'

  7、日志清除

  FROM sysfiles

  SET NOCOUNT ON

  WHERE name = @LogicalFileName

  DECLARE @LogicalFileName sysname,

  CREATE TABLE DummyTrans

  @MaxMinutes INT,

  (DummyColumn char (8000) not null)

  @NewSize INT

  DECLARE @Counter INT,

  USE tablename -- 要操作的数量库名

  @StartTime DATETIME,

  SELECT @LogicalFileName = 'tablename_log', -- 日志文件名

  @TruncLog VARCHAR(255)

  @MaxMinutes = 10, -- Limit on time allowed to wrap log.

  SELECT @StartTime = GETDATE(),

  @NewSize = 1 -- 你想设定的日记文件的深浅(M)

  @TruncLog = 'BACKUP LOG ' db_name() ' WITH TRUNCATE_ONLY'

  Setup / initialize

  DBCC SHRINKFILE (@LogicalFileName, @NewSize)

  DECLARE @OriginalSize int

  EXEC (@TruncLog)

  SELECT @OriginalSize = size

  -- Wrap the log if necessary.

  FROM sysfiles

  WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

  WHERE name = @LogicalFileName

  AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)

  SELECT 'Original Size of ' db_name() ' LOG is '

  AND (@OriginalSize * 8 /1024) > @NewSize

  CONVERT(VARCHAR(30),@OriginalSize) ' 8K pages or '

  BEGIN -- Outer loop.

  CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) 'MB'

  SELECT @Counter = 0

  FROM sysfiles

  WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

  WHERE name = @LogicalFileName

  BEGIN -- update

  CREATE TABLE DummyTrans

  INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans

  (DummyColumn char (8000) not null)

  SELECT @Counter = @Counter 1

  DECLARE @Counter INT,

  END

  @StartTime DATETIME,

  EXEC (@TruncLog)

  @TruncLog VARCHAR(255)

  END

  SELECT @StartTime = GETDATE(),

  SELECT 'Final Size of ' db_name() ' LOG is '

  @TruncLog = 'BACKUP LOG ' db_name() ' WITH TRUNCATE_ONLY'

  CONVERT(VARCHAR(30),size) ' 8K pages or '

  DBCC SHRINKFILE (@LogicalFileName, @NewSize)

  CONVERT(VARCHAR(30),(size*8/1024)) 'MB'

  EXEC (@TruncLog)

  FROM sysfiles

  -- Wrap the log if necessary.

  WHERE name = @LogicalFileName

  WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

  DROP TABLE DummyTrans

  AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)

  SET NOCOUNT OFF

  AND (@OriginalSize * 8 /1024) > @NewSize

  8、表达:更换有个别表

  BEGIN -- Outer loop.

  exec sp_changeobjectowner 'tablename','dbo'

  SELECT @Counter = 0

  9、存储改造全部表

  WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

  CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch

  BEGIN -- update

  @OldOwner as NVARCHAR(128),

  INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans

  @NewOwner as NVARCHAR(128)

  SELECT @Counter = @Counter 1

  AS

  END

  DECLARE @Name as NVARCHAR(128)

  EXEC (@TruncLog)

  DECLARE @Owner as NVARCHAR(128)

  END

  DECLARE @OwnerName as NVARCHAR(128)

  SELECT 'Final Size of ' db_name() ' LOG is '

  DECLARE curObject CURSOR FOR

  CONVERT(VARCHAR(30),size) ' 8K pages or '

  select 'Name' = name,

  CONVERT(VARCHAR(30),(size*8/1024)) 'MB'

  'Owner' = user_name(uid)

  FROM sysfiles

  from sysobjects

  WHERE name = @LogicalFileName

  where user_name(uid)=@OldOwner

  DROP TABLE DummyTrans

  order by name

  SET NOCOUNT OFF

  OPEN curObject

  8、表达:改造某些表

  FETCH NEXT FROM curObject INTO @Name, @Owner

  exec sp_changeobjectowner 'tablename','dbo'

  WHILE(@@FETCH_STATUS=0)

  9、存款和储蓄更改全体表

  BEGIN

  CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch

  if @Owner=@OldOwner

  @OldOwner as NVARCHAR(128),

  begin

  @NewOwner as NVARCHAR(128)

  set @OwnerName = @OldOwner '.' rtrim(@Name)

  AS

  exec sp_changeobjectowner @OwnerName, @NewOwner

  DECLARE @Name as NVARCHAR(128)

  end

  DECLARE @Owner as NVARCHAR(128)

  -- select @name,@NewOwner,@OldOwner

  DECLARE @OwnerName as NVARCHAR(128)

  FETCH NEXT FROM curObject INTO @Name, @Owner

  DECLARE curObject CURSOR FOR

  END

  select 'Name' = name,

  close curObject

  'Owner' = user_name(uid)

  deallocate curObject

  from sysobjects

  GO

  where user_name(uid)=@OldOwner

  10、SQL SELANDVE陆风X8中一直循环写入数据

  order by name

  declare @i int

  OPEN curObject

  set @i=1

  FETCH NEXT FROM curObject INTO @Name, @Owner

  while @i<30

  WHILE(@@FETCH_STATUS=0)

  begin

  BEGIN

  insert into test (userid) values(@i)

  if @Owner=@OldOwner

  set @i=@i 1

  begin

  end

  set @OwnerName = @OldOwner '.' rtrim(@Name)

  案例:

  exec sp_changeobjectowner @OwnerName, @NewOwner

  有如下表,须求就裱中有所沒有及格的成績,在每一遍增長0.1的基礎上,使他們剛好及格:

  end

  Name score

  -- select @name,@NewOwner,@OldOwner

  Zhangshan 80

  FETCH NEXT FROM curObject INTO @Name, @Owner

  Lishi 59

  END

  Wangwu 50

  close curObject

  Songquan 69

  deallocate curObject

  while((select min(score) from tb_table)<60)

  GO

  begin

  10、SQL SE奇骏VELX570中直接循环写入数据

  update tb_table set score =score*1.01

  declare @i int

  where score<60

  set @i=1

  if (select min(score) from tb_table)>60

  while @i<30

  break

  begin

  else

  insert into test (userid) values(@i)

  continue

  set @i=@i 1

  end

  end

  数据开垦-卓越

  案例:

  1.按姓氏笔画排序:

  有如下表,须要就裱中负有沒有及格的成績,在每一遍增長0.1的基礎上,使他們剛好及格:

  Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //从少到多

  Name score

  2.数据库加密:

  Zhangshan 80

  select encrypt('原始密码')

  Lishi 59

  select pwdencrypt('原始密码')

  Wangwu 50

  select pwdcompare('原始密码','加密后密码') = 1--同样;否则分歧样encrypt('原始密码')

  Songquan 69

  select pwdencrypt('原始密码')

  while((select min(score) from tb_table)<60)

  select pwdcompare('原始密码','加密后密码') = 1--同样;不然不一样样

  begin

  3.取回表中字段:

  update tb_table set score =score*1.01

  declare @list varchar(1000),

  where score<60

  @sql nvarchar(1000)

  if (select min(score) from tb_table)>60

  select @list=@list ',' b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'

  break

  set @sql='select ' right(@list,len(@list)-1) ' from 表A'

  else

  exec (@sql)

  continue

  4.查看硬盘分区:

  end

  EXEC master..xp_fixeddrives

 

  5.相比A,B表是还是不是等于:

  数据开荒-卓越

  if (select checksum_agg(binary_checksum(*)) from A)

  1.按姓氏笔画排序:

  =

  Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //从少到多

  (select checksum_agg(binary_checksum(*)) from B)

  2.数据库加密:

  print '相等'

  select encrypt('原始密码')

  else

  select pwdencrypt('原始密码')

  print '不相等'

  select pwdcompare('原始密码','加密后密码') = 1--一样;不然不一样等 encrypt('原始密码')

  6.杀掉全体的风浪探察器进度:

  select pwdencrypt('原始密码')

  DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill ' RTRIM(spid) FROM master.dbo.sysprocesses

  select pwdcompare('原始密码','加密后密码') = 1--同样;不然不平等

  WHERE program_name IN('SQL profiler',N'SQL 事件探查器')

  3.取回表中字段:

  EXEC sp_msforeach_worker '?'

  declare @list varchar(1000),

  7.记下寻找:

  @sql nvarchar(1000)

  开头到N条记录

  select @list=@list ',' b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'

  Select Top N * From 表

  set @sql='select ' right(@list,len(@list)-1) ' from 表A'

  -------------------------------

  exec (@sql)

  N到M条记录(要有主索引ID)

  4.翻看硬盘分区:

  Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc

  EXEC master..xp_fixeddrives

  ----------------------------------

  5.相比A,B表是还是不是等于:

  N到最终记录

  if (select checksum_agg(binary_checksum(*)) from A)

  Select Top N * From 表 Order by ID Desc

  =

  案例

  (select checksum_agg(binary_checksum(*)) from B)

  比如1:一张表有三万多条记下,表的首先个字段 RecID 是自增加字段, 写八个SQL语句, 搜索表的第31到第叁二十一个记录。

  print '相等'

  select top 10 recid from A where recid not in(select top 30 recid from A)

  else

  分析:假如如此写会生出一些难题,假若recid在表中存在逻辑索引。

  print '不相等'

  select top 10 recid from A where……是从索引中检索,而背后的select top 30 recid from A则在数据表中搜索,那样由于索引中的顺序有望和数目表中的不均等,那样就变成查询到的不是当然的欲得到的多寡。

  6.杀掉全数的事件探察器进程:

  消除方案

  DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill ' RTRIM(spid) FROM master.dbo.sysprocesses

  1, 用order by select top 30 recid from A order by ricid 如若该字段不是自增进,就能够出现难题

  WHERE program_name IN('SQL profiler',N'SQL 事件探查器')

  2, 在老大子查询中也加条件:select top 30 recid from A where recid>-1

  EXEC sp_msforeach_worker '?'

  例2:查询表中的最后以条记下,并不知道那个表共有多少数量,以及表结构。

  7.笔录寻找:

  set @s = 'select top 1 * from T where pid not in (select top ' str(@count-1) ' pid from T)'

  开头到N条记录

  print @s exec sp_executesql @s

  Select Top N * From 表

  9:获取当前数据库中的全体用户表

  -------------------------------

  select Name from sysobjects where xtype='u' and status>=0

  N到M条记录(要有主索引ID)

  10:获取某二个表的全体字段

  Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc

  select name from syscolumns where id=object_id('表名')

  ----------------------------------

  select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')

  N到结尾记录

  二种艺术的功用一样

  Select Top N * From 表 Order by ID Desc

  11:查看与某二个表相关的视图、存款和储蓄进程、函数

  案例

  select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

  举例1:一张表有30000多条记下,表的第三个字段 RecID 是自增进字段, 写贰个SQL语句, 找寻表的第31到第38个记录。

  12:查看当前数据库中有着存款和储蓄进程

  select top 10 recid from A where recid not in(select top 30 recid from A)

  select name as 存款和储蓄进程名称 from sysobjects where xtype='P'

  拆解分析:如若那样写会爆发或多或少难点,即使recid在表中设有逻辑索引。

  13:查询用户成立的富有数据库

  select top 10 recid from A where……是从索引中查究,而背后的select top 30 recid from A则在数据表中找寻,那样由于索引中的顺序有望和数量表中的不均等,那样就导致查询到的不是当然的欲获得的数据。

  select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')

  化解方案

  或者

  1, 用order by select top 30 recid from A order by ricid 就算该字段不是自拉长,就见面世难题

  select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

  2, 在极度子查询中也加条件:select top 30 recid from A where recid>-1

  14:查询某八个表的字段和数据类型

  例2:查询表中的最终以条记下,并不知道这几个表共有多少多少,以及表结构。

  select column_name,data_type from information_schema.columns

  set @s = 'select top 1 * from T where pid not in (select top ' str(@count-1) ' pid from T)'

  where table_name = '表名'

  print @s exec sp_executesql @s

  15:不相同服务器数据库之间的多少操作

  9:获取当前数据库中的全体用户表

  --创立链接服务器

  select Name from sysobjects where xtype='u' and status>=0

  exec sp_addlinkedserver 'ITSV ', ' ', 'SQ英雄订盟EDB ', '远程服务器名或ip地址 '

  10:获取某一个表的具有字段

  exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '

  select name from syscolumns where id=object_id('表名')

  --查询示例

  select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')

  select * from ITSV.数据库名.dbo.表名

  二种方法的效果与利益同样

  --导入示例

  11:查看与某四个表相关的视图、存款和储蓄进程、函数

  select * into 表 from ITSV.数据库名.dbo.表名

  select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

  --以后不再动用时去除链接服务器

  12:查看当前数据库中具有存款和储蓄进度

  exec sp_dropserver 'ITSV ', 'droplogins '

  select name as 存款和储蓄进度名称 from sysobjects where xtype='P'

  --连接远程/局域网数据(openrowset/openquery/opendatasource)

  13:查询用户创立的装有数据库

  --1、openrowset

  select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')

  --查询示例

  或者

  select * from openrowset( 'SQ英雄联盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

  select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

  --生花费地球表面

  14:查询某三个表的字段和数据类型

  select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

  select column_name,data_type from information_schema.columns

  --把地面表导入远程表

  where table_name = '表名'

  insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

  15:分歧服务器数据库之间的数码操作

  select *from 本地表

  --创造链接服务器

  --更新本地表

  exec sp_addlinkedserver 'ITSV ', ' ', 'SQ英雄结盟EDB ', '远程服务器名或ip地址 '

  update b

  exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '

  set b.列A=a.列A

  --查询示例

  from openrowset( 'SQ英雄联盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地球表面 b

  select * from ITSV.数据库名.dbo.表名

  on a.column1=b.column1

  --导入示例

  --openquery用法须求创造一个连连

  select * into 表 from ITSV.数据库名.dbo.表名

  --首先创造二个接连创制链接服务器

  --以后不再选择时去除链接服务器

  exec sp_addlinkedserver 'ITSV ', ' ', 'SQ英雄结盟EDB ', '远程服务器名或ip地址 '

  exec sp_dropserver 'ITSV ', 'droplogins '

  --查询

  --连接远程/局域网数据(openrowset/openquery/opendatasource)

  select *

  --1、openrowset

  FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')

  --查询示例

  --把本地球表面导入远程表

  select * from openrowset( 'SQ英雄联盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

  insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')

  --生成本地球表面

  select * from 本地表

  select * into 表 from openrowset( 'SQ英雄缔盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

  --更新本地球表面

  --把地点表导入远程表

  update b

  insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

  set b.列B=a.列B

  select *from 本地表

  FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a

  --更新本地球表面

  inner join 本地表 b on a.列A=b.列A

  update b

  --3、opendatasource/openrowset

  set b.列A=a.列A

  SELECT *

  from openrowset( 'SQ英雄缔盟EDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地球表面 b

  FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名澳门新萄京官方网站 3assword=密码 ' ).test.dbo.roy_ta

  on a.column1=b.column1

  --把地点表导入远程表

  --openquery用法须求创建贰个接二连三

  insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名澳门新萄京官方网站 4assword=密码 ').数据库.dbo.表名

  --首先成立二个连接创立链接服务器

  select * from 本地表

  exec sp_addlinkedserver 'ITSV ', ' ', 'SQ英雄联盟EDB ', '远程服务器名或ip地址 '

  SQL Server基本函数

  --查询

  SQL Server基本函数

  select *

  1.字符串函数 长度与深入分析用

  FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')

  1,datalength(Char_expr) 重回字符串满含字符数,但不富含后边的空格

  --把地点表导入远程表

  2,substring(expression,start,length) 取子串,字符串的下标是从“1”,start为开第多少人置,length为字符串长度,实际选取中以len(expression)猎取其长度

  insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')

  3,right(char_expr,int_expr) 再次回到字符串侧面第int_expr个字符,还用left于之相反

  select * from 本地表

  4,isnull( check_expression , replacement_value )如果check_expression為空,則返回replacement_value的值,不為空,就返回check_expression字符操作类

  --更新本地球表面

  5,Sp_addtype 自定義數據類型

  update b

  例如:EXEC sp_addtype birthday, datetime, 'NULL'

  set b.列B=a.列B

  6,set nocount {on|off}

  FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a

  使重回的结果中不包蕴关于受 Transact-SQL 语句影响的行数的音信。借使存款和储蓄进度中带有的有的说话并不回来比非常多其实的多少,则该装置由于大气减去了网络流量,因而可明明加强品质。SET NOCOUNT 设置是在实施或运转时设置,并不是在深入分析时设置。

  inner join 本地表 b on a.列A=b.列A

  SET NOCOUNT 为 ON 时,不回去计数(表示受 Transact-SQL 语句影响的行数)。

  --3、opendatasource/openrowset

  SET NOCOUNT 为 OFF 时,重返计数

  SELECT *

  常识

  FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta

  在SQL查询中:from后最多可以跟多少张表或视图:256

  --把本地球表面导入远程表

  在SQL语句中冒出 Order by,查询时,先排序,后取

  insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名

  在SQL中,贰个字段的最大体量是八千,而对此nvarchar(伍仟),由于nvarchar是Unicode码。

  select * from 本地表

  SQLServer两千同步复制技艺达成步骤

  SQL Server基本函数

  一、 预备专业

  SQL Server基本函数

  1.发布服务器,订阅服务器都创立叁个同名的windows用户,并安装同样的密码,做为公布快速照相文件夹的实惠访谈用户

  1.字符串函数 长度与分析用

  --管理工科具

  1,datalength(Char_expr) 重返字符串包罗字符数,但不含有前面包车型大巴空格

  --Computer管理

  2,substring(expression,start,length) 取子串,字符串的下标是从“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 自定義數據類型

  --建构多少个附属于administrator组的登入windows的用户(SynUser)

  例如:EXEC sp_addtype birthday, datetime, 'NULL'

  2.在发表服务器上,新建壹个分享目录,做为发表的快速照相文件的贮存目录,操作:

  6,set nocount {on|off}

  笔者的计算机--D: 新建叁个目录,名字为: PUB

  使重临的结果中不带有关于受 Transact-SQL 语句影响的行数的音讯。假设存款和储蓄进度中蕴藏的局地言辞并不回去大多其实的数码,则该装置由于大气减去了网络流量,因而可明明进步品质。SET NOCOUNT 设置是在实践或运营时设置,并非在剖判时设置。

  --右键这么些新建的目录

  SET NOCOUNT 为 ON 时,不回来计数(表示受 Transact-SQL 语句影响的行数)。

  --属性--共享

  SET NOCOUNT 为 OFF 时,重返计数

  --选取"共享该文件夹"

  常识

  --通过"权限"按纽来设置具体的用户权限,保险第一步中创制的用户(SynUser) 具备对该文件夹的具有权力

  在SQL查询中:from后最多能够跟多少张表或视图:256

  --确定

  在SQL语句中冒出 Order by,查询时,先排序,后取

  3.装置SQL代理(SQLSECR-VVERAGENT)服务的起步用户(揭橥/订阅服务器均做此设置)

  在SQL中,三个字段的最大体积是七千,而对此nvarchar(五千),由于nvarchar是Unicode码。

  开头--程序--管理工科具--服务

  SQLServer2000同步复制技艺达成步骤

  --右键SQLSERVERAGENT

  一、 预备专业

  --属性--登陆--选择"此账户"

  1.公告服务器,订阅服务器都创制三个同名的windows用户,并安装同样的密码,做为公布快速照相文件夹的有效性访谈用户

  --输入只怕选用第一步中创制的windows登入用户名(SynUser)

  --管理工科具

  --"密码"中输入该用户的密码

  --Computer管理

  4.安装SQL Server身份验证方式,消除连接时的权柄难点(发表/订阅服务器均做此设置)

  --用户和组

  企管器

  --右键用户

  --右键SQL实例--属性

  --新建用户

  --安全性--身份验证

  --建构五个直属于administrator组的登入windows的用户(SynUser)

  --选择"SQL Server 和 Windows"

  2.在布告服务器上,新建一个分享目录,做为发表的快速照相文件的贮存目录,操作:

  --确定

  小编的Computer--D: 新建叁个索引,名称为: PUB

  5.在发布服务器和订阅服务器上互动注册

  --右键那一个新建的目录

  公司管理器

  --属性--共享

  --右键SQL Server组

  --选拔"分享该文件夹"

  --新建SQL Server注册...

  --通过"权限"按纽来设置具体的用户权限,保险第一步中创立的用户(SynUser) 具备对该公文夹的全数权力

  --下一步--可用的服务器中,输入你要登记的远距离服务器名 --增添

  --确定

  --下一步--连接使用,选取第贰个"SQL Server身份验证"

  3.装置SQL代理(SQLSEEnclaveVERAGENT)服务的起步用户(公布/订阅服务器均做此设置)

  --下一步--输入用户名和密码(SynUser)

  发轫--程序--管理工科具--服务

  --下一步--选择SQL Server组,也足以成立三个新组

  --右键SQLSERVERAGENT

  --下一步--完成

  --属性--登陆--选择"此账户"

  6.对此只好用IP,不能用Computer名的,为其登记服务器小名(此步在施行中没用到)

  --输入可能选用第一步中开创的windows登陆用户名(SynUser)

  (在连接端配置,比如,在订阅服务器上安插来说,服务器名称中输入的是发表服务器的IP)

  --"密码"中输入该用户的密码

  开首--程序--Microsoft SQL Server--客户端互联网实用工具

  4.安装SQL Server身份验证形式,化解连接时的权限难点(发表/订阅服务器均做此设置)

  --别名--添加

  集团管理器

  --网络库选取"tcp/ip"--服务器外号输入SQL服务器名

  --右键SQL实例--属性

  --连接参数--服务器名称中输入SQL服务器ip地址

  --安全性--身份验证

  --纵然您改改了SQL的端口,撤销选用"动态调控端口",并输入相应的端口号

  --选择"SQL Server 和 Windows"

  二、 正式配置

  --确定

  1、配置揭橥服务器

  5.在宣布服务器和订阅服务器上相互注册

  展开集团管理器,在布告服务器(B、C、D)上实行以下步骤:

  企业管理器

  (1) 从[工具]下拉菜单的[复制]子菜单中甄选[布局颁布、订阅服务器和分发]并公布局发表和散发向导

  --右键SQL Server组

  (2) [下一步] 采取分发服务器 可以采纳把发布服务器本人当作分发服务器或然别的sql的服务器(采用自个儿)

  --新建SQL Server注册...

  (3) [下一步] 设置快速照相文件夹

  --下一步--可用的服务器中,输入你要登记的长途服务器名 --增添

  选拔私下认可\servernamePub

  --下一步--连接使用,采纳第一个"SQL Server身份验证"

  (4) [下一步] 自定义配置

  --下一步--输入用户名和密码(SynUser)

  能够挑选:是,让自己设置分发数据库属性启用宣布服务器或设置公布设置

  --下一步--选拔SQL Server组,也足以创设二个新组

  否,使用下列私下认可设置(推荐)

  --下一步--完成

  (5) [下一步] 设置分发数据库名称和职位 选拔暗许值

  6.对此只可以用IP,不能够用Computer名的,为其登记服务器外号(此步在进行中没用到)

  (6) [下一步] 启用发表服务器 选用作为公布的服务器

  (在连接端配置,举个例子,在订阅服务器上配置来讲,服务器名称中输入的是发布服务器的IP)

  (7) [下一步] 选拔需求揭露的数据库和发表项目

  起初--程序--Microsoft SQL Server--客户端互联网实用工具

  (8) [下一步] 选拔注册订阅服务器

  --别名--添加

  (9) [下一步] 完结布局

  --网络库选用"tcp/ip"--服务器外号输入SQL服务器名

  2、创设出版物

  --连接参数--服务器名称中输入SQL服务器ip地址

  公布服务器B、C、D上

  --假若您改改了SQL的端口,裁撤选拔"动态调节端口",并输入相应的端口号

  (1)从[工具]菜单的[复制]子菜单中选择[始建和保管发表]命令

  二、 正式配置

  (2)接纳要成立出版物的数据库,然后单击[创建宣布]

  1、配置公布服务器

  (3)在[创设公布发轫]的提拔对话框中单击[下一步]系统就能弹出贰个对话框。对话框上的剧情是复制的多个项目。大家明日选第二个也正是暗中同意的快速照相公布(其余多个大家能够去探望扶助)

  张开公司管理器,在发表服务器(B、C、D)上执行以下步骤:

  (4)单击[下一步]系统要求钦定能够订阅该布告的数据库服务器类型,

  (1) 从[工具]下拉菜单的[复制]子菜单中精选[布置发布、订阅服务器和散发]出现布局公布和分发向导

  SQLSERAV4VEEscort允许在分裂的数据库如 orACLE或ACCESS之间打开数据复制。

  (2) [下一步] 选用分发服务器 能够选取把公布服务器本身当做分发服务器也许其余sql的服务器(采取自身)

  可是在此地大家选拔运转"SQL SE翼虎VEENVISION 两千"的数据库服务器

  (3) [下一步] 设置快速照相文件夹

  (5)单击[下一步]系统就弹出二个概念小说的对话框也正是挑选要出版的表

  选用私下认可\servernamePub

  注意: 固然面前采取了事情公布 则再这一步中只好选择带有主键的表

  (4) [下一步] 自定义配置

  (6)采用发布名称和陈说

  能够挑选:是,让自己设置分发数据库属性启用发表服务器或安装公布设置

  (7)自定义宣布属性 向导提供的选料:

  否,使用下列私下认可设置(推荐)

  是 小编将自定义数据筛选,启用无名订阅和或任何自定义属性

  (5) [下一步] 设置分发数据库名称和职位 选择暗中认可值

  否 依据钦定形式创建公布 (提出采用自定义的法子)

  (6) [下一步] 启用宣布服务器 选拔作为发布的服务器

  (8)[下一步] 选用筛选发表的措施

  (7) [下一步] 选拔要求表露的数据库和透露项目

  (9)[下一步] 能够挑选是不是允许无名订阅

  (8) [下一步]澳门新萄京官方网站, 选拔注册订阅服务器

  1)假使接纳签字订阅,则需求在发布服务器上加多订阅服务器

  (9) [下一步] 达成布局

  方法: [工具]->[复制]->[布局发表、订阅服务器和散发的性质]->[订阅服务器] 中添加

  2、创制出版物

  不然在订阅服务器上呼吁订阅时会现身的提示:改宣布不允许无名氏订阅

  发表服务器B、C、D上

  即使仍然必要无名氏订阅则用以下消除办法

  (1)从[工具]菜单的[复制]子菜单中挑选[成立和管理发表]命令

  [厂商管理器]->[复制]->[宣告内容]->[属性]->[订阅选项] 选拔允许无名氏央浼订阅

  (2)采用要创制出版物的数据库,然后单击[成立发表]

  2)如若选拔无名氏订阅,则布署订阅服务器时不会现出上述提醒

  (3)在[创办公布开首]的唤醒对话框中单击[下一步]系统就能够弹出二个对话框。对话框上的源委是复制的四个门类。我们未来选第二个也即是暗中认可的快速照相公布(其余三个我们能够去探视帮忙)

  (10)[下一步] 设置快速照相 代理程序调节

  (4)单击[下一步]系统供给钦赐能够订阅该布告的数据库服务器类型,

  (11)[下一步] 完结布局

  SQLSEENVISIONVEWrangler允许在分裂的数据库如 orACLE或ACCESS之间开始展览多少复制。

  当成功出版物的始建后制造出版物的数据库也就变成了三个分享数据库

  不过在这里大家挑选运转"SQL SE瑞虎VE途乐 三千"的数据库服务器

  有数据

  (5)单击[下一步]系统就弹出三个定义文章的对话框也便是选拔要出版的表

  srv1.库名..author有字段:id,name,phone,

  注意: 假若前方接纳了政工发布 则再这一步中不得不选用带有主键的表

  srv2.库名..author有字段:id,name,telphone,adress

  (6)选取宣布名称和描述

  要求:

  (7)自定义发表属性 向导提供的挑选:

  srv1.库名..author扩展记录则srv1.库名..author记录扩展

  是 笔者将自定义数据筛选,启用佚名订阅和或任何自定义属性

  srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新

  否 依照钦点形式开创发布 (建议选取自定义的方法)

  --*/

  (8)[下一步] 选用筛选公布的办法

  --差不离的拍卖步骤

  (9)[下一步] 能够挑选是不是同意无名氏订阅

  --1.在 srv1 上创制连接服务器,以便在 srv1 中操作 srv2,完成协同

  1)假设采纳具名订阅,则供给在发布服务器上增添订阅服务器

  exec sp_addlinkedserver 'srv2','','SQ英雄结盟EDB','srv2的sql实例名或ip'

  方法: [工具]->[复制]->[布置揭橥、订阅服务器和分发的习性]->[订阅服务器] 中添加

  exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密码'

  不然在订阅服务器上呼吁订阅时会出现的唤起:改公布不相同意无名订阅

  go

  假诺还是须求佚名订阅则用以下搞定办法

  --2.在 srv1 和 srv2 这两台Computer中,运营msdtc(布满式事务管理服务),况且安装为自发性运行

  [商厦管理器]->[复制]->[透露内容]->[属性]->[订阅选项] 选拔允许无名诉求订阅

  。小编的处理器--调节面板--管理工科具--服务--右键 Distributed Transaction Coordinator--属性--运行--并将开发银行项目设置为活动运行

  2)假使接纳佚名订阅,则计划订阅服务器时不会现出上述提醒

  go

  (10)[下一步] 设置快速照相 代理程序调整

  --然后创建一个功课定期调用地点的联合管理存款和储蓄进度就行了

  (11)[下一步] 完结布局

  企业处理器

  当成功出版物的创制后创造出版物的数据库也就改为了贰个共享数据库

  --管理

  有数据

  --SQL Server代理

  srv1.库名..author有字段:id,name,phone,

  --右键作业

  srv2.库名..author有字段:id,name,telphone,adress

  --新建作业

  要求:

  --"常规"项中输入作业名称

  srv1.库名..author扩展记录则srv1.库名..author记录扩大

  --"步骤"项

  srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新

  --新建

  --*/

  --"步骤名"中输入步骤名

  --大概的拍卖步骤

  --"类型"中选择"Transact-SQL 脚本(TSQL)"

  --1.在 srv1 上创制连接服务器,以便在 srv1 中操作 srv2,实现联机

  --"数据库"选拔实行命令的数据库

  exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql实例名或ip'

  --"命令"中输入要推行的言辞: exec p_process

  exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密码'

  --确定

  go

  --"调度"项

  --2.在 srv1 和 srv2 这两台Computer中,运维msdtc(布满式事务管理服务),並且安装为自发性运行

  --新建调整

  。笔者的微型Computer--调控面板--管理工科具--服务--右键 Distributed Transaction Coordinator--属性--运营--并将起动项目设置为全自动运行

  --"名称"中输入调解名称

  go

  --"调解项目"中选拔你的课业推行安顿

  --然后成立贰个功课定时调用地方的共同处理存款和储蓄进程就行了

  --假设选取"频频出现"

  企管器

  --点"改换"来安装你的时间安插

  --管理

  然后将SQL Agent服务运行,并安装为全自动运行,不然你的课业不会被推行

  --SQL Server代理

  设置方式:

  --右键作业

  小编的计算机--调节面板--处理工科具--服务--右键 SQLSEHavalVERAGENT--属性--运维项目--选取"自动运转"--分明.

  --新建作业

  --3.兑现同步管理的方法2,定时同步

  --"常规"项中输入作业名称

  --在srv第11中学开创如下的一块儿管理存款和储蓄进度

  --"步骤"项

  create proc p_process

  --新建

  as

  --"步骤名"中输入步骤名

  --更新修改过的数目

  --"类型"中选择"Transact-SQL 脚本(TSQL)"

  update b set name=i.name,telphone=i.telphone

  --"数据库"选取推行命令的数据库

  from srv2.库名.dbo.author b,author i

  --"命令"中输入要实行的口舌: exec p_process

  where 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 i

  --"调治项目"中选拔你的作业推行布置

  where not exists(

  --要是选取"一再出现"

  select * from srv2.库名.dbo.author where id=i.id)

  --点"改换"来安装你的时光安插

  --删除已经去除的数额(借使要求的话)

  然后将SQL Agent服务运营,并设置为自动运转,不然你的学业不会被推行

  delete b

  设置方法:

  from srv2.库名.dbo.author b

  我的Computer--调整面板--管理工科具--服务--右键 SQLSE传祺VERAGENT--属性--运转项目--采取"自动运行"--分明.

  where not exists(

  --3.兑现共同管理的方法2,定期同步

  select * from author where id=b.id)

  --在srv第11中学开创如下的联手管理存储进度

  go

  create proc p_process

  as

  --更新修改过的数码

  update b set name=i.name,telphone=i.telphone

  from srv2.库名.dbo.author b,author i

  where 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 i

  where not exists(

  select * from srv2.库名.dbo.author where id=i.id)

  --删除已经去除的数据(借使供给的话)

  delete b

  from srv2.库名.dbo.author b

  where not exists(

  select * from author where id=b.id)

  go

本文由澳门新萄京官方网站发布于数据库网络,转载请注明出处:SQL2008语句大全,sql语句大全

关键词: