Mysql Sql语句注释大全实例( 四 )


@OldOwneras NVARCHAR(128),
@NewOwneras NVARCHAR(128)
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObjectCURSOR FOR
select 'Name' =name,
'Owner' =
user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObjectINTO @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 curObjectINTO @Name,
@Owner
END
close curObject
deallocate curObject
GO
10、SQL
SERVER中直接循环写入数据
declare @iint
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_tableset score
=score*1.01
where score<60
if
(select min(score)from tb_table)>60
break
else
continue
end
数据开发-经典
1.按姓氏笔画排序:
Select *From TableNameOrder By CustomerNameCollate Chinese_PRC_Stroke_ci_as
//从少到多
2.数据库加密:
select encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码')
= 1--相同;否则不相同
encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码')
= 1--相同;否则不相同
3.取回表中字段:
declare @listvarchar(1000),
@sql
nvarchar(1000)
select @list=@list+','+b.name from sysobjects
a,syscolumns b where a.id=b.idand 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 hcforeachCURSOR GLOBAL FOR SELECT 'kill
'+RTRIM(spid)FROM master.dbo.sysprocesses
WHERE program_nameIN('SQL
profiler',N'SQL
事件探查器')
EXEC sp_msforeach_worker'?'
7.记录搜索:
开头到N条记录
Select Top N
* From 表
-------------------------------
N到M条记录(要有主索引ID)
Select Top M-N
* From 表Where IDin (Select Top M
ID From 表)Order by ID Desc
----------------------------------
N到结尾记录
Select Top N
* From 表Order by IDDesc
案例
例如1:一张表有一万多条记录 , 表的第一个字段
RecID 是自增长字段 ,  写一个SQL语句 , 找出表的第31到第40个记录 。
select top 10
recid from Awhere recidnot in(select top 30
recid from A)
分析:如果这样写会产生某些问题 , 如果recid在表中存在逻辑索引 。
select top 10
recid from Awhere……是从索引中查找 , 而后面的select top 30
recid from A则在数据表中查找 , 这样由于索引中的顺序有可能和数据表中的不一致 , 这样就导致查询到的不是本来的欲得到的数据 。
解决方案
1 , 
用order by select top 30
recid from Aorder by ricid
如果该字段不是自增长 , 就会出现问题
2 , 
在那个子查询中也加条件:select top 30
recid from Awhere 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 sysobjectswhere xtype='u' and status>=0


推荐阅读