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條記錄
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到第40個記錄。
select top 10 recid from a where recid not ?in(select top 30 recid from a)
分析:如果這樣寫會產生某些問題,如果recid在表中存在邏輯索引。
select top 10 recid from a where……是從索引中查找,而后面的select top 30 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 ‘, ‘ ‘, ‘sqloledb ‘, ‘遠程服務器名或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( ‘sqloledb ‘, ‘sql服務器名 ‘; ‘用戶名 ‘; ‘密碼 ‘,數據庫名.dbo.表名)
–生成本地表
select * into 表 from openrowset( ‘sqloledb ‘, ‘sql服務器名 ‘; ‘用戶名 ‘; ‘密碼 ‘,數據庫名.dbo.表名)
–把本地表導入遠程表
insert openrowset( ‘sqloledb ‘, ‘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 ‘, ‘ ‘, ‘sqloledb ‘, ‘遠程服務器名或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 本地表
?以上就是mysql經典語句大全——開發篇的內容,更多相關內容請關注PHP中文網(www.php.cn)!?