數據開發
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?本地表?
?
原文地址:http://www.cnblogs.com/yubinfeng/archive/2010/11/02/1867386.html
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
