1、说明:创建数据库
CREATE
database
name
2、说明:删除数据库
drop
dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC
'disk'
'testBack'
'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP
pubs
testBack
4、说明:创建新表
create
tabname(col1 type1 [
null
primary
],col2 type2 [
null
create
tab_new
tab_old (使用旧表创建新表)
B:
table
as
col1,col2…
tab_old definition
table
table
add
col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加
类型的长度。
7、说明:添加主键:
table
add
key
Alter
tabname
primary
(col)
8、说明:创建索引:
[
]
idxname
tabname(col….)
删除索引:
index
create
viewname
select
drop
viewname
10、说明:几个简单的基本的sql语句
选择:
*
table1
范围
插入:
into
values
delete
table1
范围
更新:
table1
field1=value1
范围
查找:
*
table1
field1
’%value1%’
select
from
order
field1,field2 [
]
总数:
count
totalcount
table1
求和:
sum
as
from
select
(field1)
avgvalue
table1
最大:
max
as
from
select
(field1)
minvalue
table1
11、说明:几个高级查询运算词
A:
运算符
UNION
ALL
UNION
UNION
),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B:
运算符
EXCEPT
ALL
EXCEPT
EXCEPT
),不消除重复行。
C:
运算符
INTERSECT
ALL
INTERSECT
INTERSECT
),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、
(
)
:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL:
a.a, a.b, a.c, b.c, b.d, b.f
a
OUT
b
a.a = b.c
B:
(
)
:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:
/
(
)
:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
12、分组:
by
一张表,一旦分组完成后,查询后只能得到组相关的信息。
count
sum
max
min
avg
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名
14.如何修改数据库的名称:
sp_renamedb
,
二、提升
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:
*
b
a
1<>1(仅用于SQlServer)
法二:
top
into
from
into
select
from
into
select
from
in
where
from
in
where
a,b,c
a
a
(
d
b ) 或者:
a,b,c
a
a
(1,2,3)
5、说明:显示文章、提交人和最后回复时间
select
from
a,(
max
from
where
.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select
from
LEFT
JOIN
ON
*
(
a,b,c
a) T
t.a > 1;
8、说明:
的用法,
限制查询数据范围时包括了边界值,
between
*
table1
time
time1
time2
select
from
where
not
数值1
数值2
9、说明:
的使用方法
select
from
where
not
in
from
where
exists (
*
table2
table1.field1=table2.field1 )
11、说明:四表联查问题:
select
from
left
join
on
right
join
on
inner
d
a.a=d.d
.....
12、说明:日程安排提前五分钟提醒
SQL:
*
日程安排
datediff(
,f开始时间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select
10 b.*
(
top
from
order
排序字段
) a,表名 b
b.主键字段 = a.主键字段
by
declare
int
end
@sql nvarchar(600)
@sql=’
top
end
from
where
not
(
top
from
where
exec
注意:在
后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理。Rid为一个标识列,如果
后还有具体的字段,这样做是非常有好处的。因为这样可以避免
的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)
14、说明:前10条记录
select
10 * form table1
范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select
from
where
select
(a)
tablename tb
tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(
a
tableA )
(
a
tableB)
(
a
tableC)
17、说明:随机取出10条数据
select
10 *
tablename
by
newid()
19、说明:删除重复记录
1),
from
where
not
(
max
from
group
col1,col2,...)
2),
distinct
into
from
delete
tablename
into
select
from
table
column_b
identity(1,1)
from
where
not
(
select
(column_b)
tablename
by
table
drop
column_b
20、说明:列出数据库里所有的表名
select
from
where
'U'
name
syscolumns
id=object_id(
)
22、说明:列示type、vender、pcs字段,以type字段排列,
可以方便地实现多重选择,类似
中的
。
select
sum
case
when
then
else
end
sum
case
when
then
else
end
sum
case
when
then
else
end
FROM
group
type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE
table1
24、说明:选择从10到15的记录
select
5 *
(
top
from
order
id
) table_别名
by
desc
三、技巧
1、1=1,1=2的使用,在SQL语句组合时用的较多
“
1=1” 是表示选择全部 “
1=2”全部不选,
如:
if @strWhere !=
@strSQL =
+ @tblName +
+ @strWhere
end
else
begin
set
'select count(*) as Total from ['
']'
end
我们可以直接写成
错误!未找到目录项。
set
'select count(*) as Total from ['
'] where 1=1 安定 '
sp_change_users_login
,
,
from
'E:\dvbbs.bak'
6、修复数据库
ALTER
[dvbbs]
SINGLE_USER
GO
DBCC CHECKDB(
,repair_allow_data_loss)
TABLOCK
GO
ALTER
[dvbbs]
MULTI_USER
GO
7、日志清除
SET
ON
DECLARE
@MaxMinutes
,
INT
-- 要操作的数据库名
SELECT
'tablename_log'
-- 日志文件名
@MaxMinutes = 10,
@NewSize = 1
@OriginalSize
@OriginalSize =
FROM
WHERE
= @LogicalFileName
SELECT
+ db_name() +
+
(
(30),@OriginalSize) +
+
(
(30),(@OriginalSize*8/1024)) +
FROM
WHERE
= @LogicalFileName
CREATE
DummyTrans
char
not
)
@Counter
,
@TruncLog
(255)
SELECT
@TruncLog =
+ db_name() +
(@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE())
AND
SELECT
FROM
WHERE
= @LogicalFileName)
(@OriginalSize * 8 /1024) > @NewSize
-- Outer loop.
SELECT
WHILE ((@Counter < @OriginalSize / 16)
(@Counter < 50000))
-- update
DummyTrans
(
)
DummyTrans
@Counter = @Counter + 1
EXEC
END
SELECT
+ db_name() +
+
(
(30),
) +
+
(
(30),(
*8/1024)) +
FROM
WHERE
= @LogicalFileName
DROP
DummyTrans
SET
OFF
8、说明:更改某个表
exec
'tablename'
'dbo'
9、存储更改全部表
CREATE
dbo.User_ChangeObjectOwnerBatch
@OldOwner
NVARCHAR(128),
@NewOwner
NVARCHAR(128)
AS
DECLARE
Name
NVARCHAR(128)
DECLARE
as
@OwnerName
NVARCHAR(128)
DECLARE
CURSOR
'Name'
name
'Owner'
sysobjects
where
by
curObject
FETCH
FROM
INTO
Name
set
'.'
Name
exec
NEXT
curObject
@
, @Owner
END
close
curObject
GO
@i
@i=1
while @i<30
begin
into
values
set
Name
Zhangshan 80
Wangwu 50
select
(score)
tb_table)<60)
begin
update
set
score<60
if (
min
from
break
continue
end
1.按姓氏笔画排序:
Select
From
Order
CustomerName
Chinese_PRC_Stroke_ci_as //从少到多
2.数据库加密:
select
'原始密码'
pwdencrypt(
)
select
'原始密码'
'加密后密码'
--相同;否则不相同 encrypt('原始密码')
select
'原始密码'
pwdcompare(
,
) = 1
@list
(1000),
@sql nvarchar(1000)
select
','
name
sysobjects a,syscolumns b
a.id=b.id
a.
=
@sql=
+
(@list,len(@list)-1)+
(@sql)
4.查看硬盘分区:
EXEC
select
from
=
select
from
'相等'
else
print
hcforeach
GLOBAL
SELECT
+RTRIM(spid)
master.dbo.sysprocesses
WHERE
IN
'SQL profiler'
'SQL 事件探查器'
sp_msforeach_worker
Top
From
Top
From
Where
in
Select
M ID
表)
by
Desc
----------------------------------
N到结尾记录
Select
N *
表
by
Desc
案例
例如1:一张表有一万多条记录,表的第一个字段 RecID 是自增长字段, 写一个SQL语句,找出表的第31到第40个记录。
top
from
where
not
(
top
from
select
10 recid
A
……是从索引中查找,而后面的
top
from
order
select
30 recid
A
by
select
30 recid
A
recid>-1
例2:查询表中的最后以条记录,并不知道这个表共有多少数据,以及表结构。
set
'select top 1 * from T where pid not in (select top '
count
' pid from T)'
print @s
sp_executesql @s
9:获取当前数据库中的所有用户表
select
from
where
'u'
status>=0
10:获取某一个表的所有字段
select
from
where
'表名'
name
syscolumns
id
(
id
sysobjects
type =
and
=
)
两种方式的效果相同
11:查看与某一个表相关的视图、存储过程、函数
select
from
where
and
like
name
存储过程名称
sysobjects
xtype=
*
master..sysdatabases D
sid
in
select
from
where
=
)
或者
select
name
DB_NAME
master..sysdatabases
sid <> 0x01
14:查询某一个表的字段和数据类型
select
from
table_name =
sp_addlinkedserver
,
,
,
sp_addlinkedsrvlogin
,
,
,
,
*
ITSV.数据库名.dbo.表名
--导入示例
select
into
from
sp_dropserver
,
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset
--查询示例
select
from
'SQLOLEDB '
'sql服务器名 '
'用户名 '
'密码 '
*
表
openrowset(
,
;
;
,数据库名.dbo.表名)
openrowset(
,
;
;
,数据库名.dbo.表名)
select
from
b
set
from
'SQLOLEDB '
'sql服务器名 '
'用户名 '
'密码 '
as
inner
本地表 b
on
sp_addlinkedserver
,
,
,
*
FROM
'SELECT * FROM 数据库.dbo.表名 '
openquery(ITSV,
)
select
from
b
set
openquery(ITSV,
)
a
inner
本地表 b
a.列A=b.列A
*
FROM
'SQLOLEDB '
'Data Source=ip/ServerName;User ID=登陆名;Password=密码 '
opendatasource(
,
).数据库.dbo.表名
select
from
substring
right
left
isnull
EXEC
'NULL'
6,
nocount {
|
}
使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。
SET
ON
NOCOUNT 为
时,返回计数
常识
from
Order
,查询时,先排序,后取
在SQL中,一个字段的最大容量是8000,而对于nvarchar(4000),由于nvarchar是Unicode码。
SQLServer2000同步复制技术实现步骤
一、 预备工作
1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户
--管理工具
--计算机管理
--用户和组
--右键用户
--新建用户
--建立一个隶属于administrator组的登陆windows的用户(SynUser)
2.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作:
我的电脑
--确定
3.设置SQL代理(SQLSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置)
开始
(在连接端配置,比如,在订阅服务器上配置的话,服务器名称中输入的是发布服务器的IP)
开始
"SQL SERVER 2000"
name
name
要求:
srv1.库名..author增加记录则srv1.库名..author记录增加
srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新
--*/
sp_addlinkedserver
,
,
,
sp_addlinkedsrvlogin
,
,
,
,
--控制面板--管理工具--服务--右键 Distributed Transaction Coordinator--属性--启动--并将启动类型设置为自动启动
go
--然后创建一个作业定时调用上面的同步处理存储过程就行了
设置方法:
我的电脑
--在srv1中创建如下的同步处理存储过程
create
b
name
name
srv2.库名.dbo.author b,author i
where
and
(b.
<> i.
or
--插入新增的数据
insert
name
id,
,telphone
author i
where
exists(
select
from
where
--删除已经删除的数据(如果需要的话)
delete
srv2.库名.dbo.author b
where
exists(
select
from
where
<code plain"="" style="margin: 0px !important; padding: 0px !important; white-space: pre-wrap; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; min-height: auto !important;">go
原文链接:https://blog.csdn.net/weixin_37997251/article/details/80733960