一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - 有用的SQL語句(刪除重復記錄,收縮日志)

有用的SQL語句(刪除重復記錄,收縮日志)

2019-10-23 14:37mssql教程網 Sql Server

都是一些比較有用的sql語句,學習的朋友可以參考下。

刪除重復記錄,將TABLE_NAME中的不重復記錄保存到#TABLE_NAME中 

select distinct * into #table_name from table_name 
delete from table_name 
select * into table_name from #table_name 
drop table #table_name 

與此相關的是“select into”選項,可以在數據庫屬性 
對話框中,勾起來此項,或者在Query Analyzer中執行 
execute sp_dboption 'db_name','select into','true' 
開啟。默認值是關閉的。 


******************************************************* 
收縮事務日志(多次執行) 

backup log register with NO_LOG 
backup log register with TRUNCATE_ONLY 
DBCC SHRINKDATABASE(register) 

更多有用的sql語句
/*sql 語法學習*/ 

/*函數的學習---------------------------------------*/ 

獲取當前時間(時/分/秒):select convert(varchar(10),getdate(),8) 
獲取當前年月日:select convert(varchar(10),getdate(),120) 
獲取當前年月:select convert(varchar(7),getdate(),120) 
獲取當前年月:select convert(varchar(10),year(getdate())) + '-' + convert(varchar(10),month(getDate())) 

select cast(b as integer) as bb from table1 where b = '11' 

select a,case b when '11' then '細細' when '22' then '呵呵' else '哈哈' end as 轉換,c from table1 

select a,b,case when c = '111' then '細細' when c = '222' then '呵呵' else '哈哈' end as 轉換1 from table1 

獲取當前時間:print current_timestamp 

/*---------------------------------------------*/ 

-----------------將sql查詢輸出到txt文本文件中------------------------------------------- 
EXEC master..xp_cmdshell 'bcp 數據庫名.dbo.表名 out d:\1.txt -c -q -U"sa" -P"password"' 

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

---------------------------round的用法beigin------------------------------ 
declare @s float 
set @s = 0.1566134 
print round(@s,3) 
---------------------------round的用法end--------------------------------- 

--------------------------------自動收縮數據庫begin----------------------------- 

EXEC [master]..sp_dboption [Database Name], 'autoshrink', 'TRUE' 

--------------------------------自動收縮數據庫end----------------------------- 


-------------------------------去除首尾無效的字符begin-------------------------- 
declare @s varchar(20) 
set @s=',,,1->1,' 
while(left(@s,1)=',') 
set @s=stuff(@s,1,1,'') 
while(right(@s,1)=',') 
set @s=stuff(reverse(@s),1,1,'') 
select @s 
-------------------------------去除首尾無效的字符end-------------------------- 


------------刪除數據庫中的重復記錄(且僅保留一條有效記錄)示例----------------- 
create table A 

userID int identity(1,1), 
userName varchar(20), 
userPwd varchar(20), 
userEmail varchar(50) 

insert into A(userName,userpwd) select 'qin','qin' union all select 'qin','qin1' union all select 'qin','qin1' 
select * from A 

--method one 
delete from A where userid not in(select min(userid) as userid from A group by username ,userpwd) 

--method two 
delete from A where exists (select * from A b where a.username = b.username and a.userpwd = b.userpwd and a.userid < b.userid) 

--method three 
delete from a where userid not in(select min(userid) from A b where a.username = b.username and a.userpwd = b.userpwd and a.userid > b.userID) 

select * from A 
drop table A 

------------刪除數據庫中的重復記錄(且僅保留一條有效記錄)示例----------------- 



-------------------------------迭歸的應用(找起點和終點之間的路徑----------------------------- 
create table t 
(st varchar(20),ed varchar(20),km int) 
go 
insert t values ('A','B',1000) 
insert t values ('A','C',1100) 
insert t values ('A','D',900) 
insert t values ('A','E',400) 
insert t values ('B','D',300) 
insert t values ('D','F',600) 
insert t values ('E','A',400) 
insert t values ('F','G',1000) 
insert t values ('C','B',600) 
go 
--顯示插入值 
select * from t 
go 

--創建函數 
--函數返回一個表,根據實際情況的不同一層一層的插入,可以充分利用生成的表 
create function f_go(@col varchar(10)) 
returns @t table(col varchar(30),st varchar(20),ed varchar(20),km int,level int) 
as 
begin 
declare @i int 
set @i=1 
insert @t select st+'-'+ed,*,@i from t where st=@col 
while exists (select * from t a,@t b where 
b.ed=a.st and b.level=@i and b.ed<>@col ) 
begin 
set @i=@i+1 
insert @t 
select b.col+'-'+a.ed,a.st,a.ed,b.km+a.km,@i from t a,@t b 
where b.level=@i-1 and b.ed=a.st and b.ed<>@col 
end 
return 
end 
go 

--調用 
--select * from dbo.f_go('A') 
select col,km from dbo.f_go('a') 

--刪除環境 
drop function f_go 
drop table t 

-------------------------------迭歸的應用(找起點和終點之間的路徑----------------------------- 



--------按類別去最新的前N條記錄,把同一類的放在一起,統計同一類的項的個數等------------- 
create table t 

ClassName varchar(50), 
ClassCode varchar(10), 
ClassID int identity(1,1) 

insert into t 
select 'cccc1','002' union all 
select 'aaaa','001' union all 
select 'bbbb','001' union all 
select 'aaaa1','002' union all 
select 'cccc','001' union all 
select 'dddd','001' union all 
select 'bbbb1','002' union all 
select 'dddd1','002' 
select * from t 
select ClassCode = (case when exists(select 1 from t t1 where classCode = t1.ClassCode 
and ClassID < t1.ClassID) 
then '' else ClassCode end),ClassName from t order by ClassCode,ClassID desc 

select count(*),classCode from (select top 100 percent ClassCode = (case when exists(select 1 from t t1 where classCode = t1.ClassCode 
and ClassID < t1.ClassID) 
then '' else ClassCode end),ClassName from t order by ClassCode,ClassID desc)a group by classcode 

select classCode,className from t order by classCode,classID desc 
drop table t 

--------按類別去最新的前N條記錄,把同一類的放在一起,統計同一類的項的個數等------------- 


-------------同上,按類別進行統計,把同一類的項的其他內容進行相加并發在一個字段中------------------ 
create table tb(ProductID varchar(10),PositionID varchar(10)) 
insert into tb 
select '10001','A1' 
union all select '10001','B2' 
union all select '10002','C3' 
union all select '10002','D4' 
union all select '10002','E5' 
go 

create function dbo.fc_str(@ProductID varchar(10)) 
returns varchar(100) 
as 
begin 
declare @sql varchar(1000) 
set @sql='' 
select @sql=@sql+','+cast(PositionID as varchar(20)) from tb where ProductID=@ProductID 
return stuff(@sql,1,1,'') 
end 
go 

select ProductID,dbo.fc_str(ProductID) as PositionID from tb group by ProductID 

drop table tb 

drop function dbo.fc_str 

-------------按類別進行統計,把同一類的項的其他內容進行相加并發在一個字段中------------------ 



--取各個類的前n條記錄(每個類都取top n條) 
--如果有數據庫中有多個類,現在要取每個類的前n條記錄,可用以下語句 
Create Table TEST 
(ID Int Identity(1,1), 
h_id Int) 
Insert TEST Select 100 
Union All Select 100 
Union All Select 100 
Union All Select 101 
Union All Select 101 
Union All Select 101 
Union All Select 100 
GO 
--方法一: 
Select * From TEST A Where Id In(Select TOP 3 ID From TEST Where h_id=A.h_id) 
--方法二: 
Select * From TEST A Where Not Exists (Select 1 From TEST Where h_id=A.h_id And ID<A.ID Having Count(*)>2) 
--方法三: 
Select * From TEST A Where (Select Count(*) From TEST Where h_id=A.h_id And ID<A.ID)<3 
GO 
Drop Table TEST 
GO 


--分組統計,統計每個段中數據的個數 
--一般成績統計可以用到這個 
declare @t table(id int,weight int) 
insert into @t select 1, 20 
insert into @t select 2, 15 
insert into @t select 3, 5 
insert into @t select 4, 60 
insert into @t select 5, 12 
insert into @t select 6, 33 
insert into @t select 7, 45 
insert into @t select 8, 59 
insert into @t select 9, 89 
insert into @t select 10,110 

declare @p int 
set @p=10 
select 
rtrim(p*@p)+'-'+rtrim((p+1)*@p">p*@p)+'-'+rtrim((p+1)*@p) as p, 
num 
from 
(select (weight/@p">weight/@p) as p,count(*) as num from @t where weight between 10 and 100 group by (weight/@p">weight/@p)) a 


----------------------------在in語句中只用自定義排序begin-------------------------------- 
declare @t table(id int,weight int) 
insert into @t select 1, 20 
insert into @t select 2, 15 
insert into @t select 3, 5 
insert into @t select 4, 60 
insert into @t select 5, 12 
insert into @t select 6, 33 
insert into @t select 7, 45 
insert into @t select 8, 59 
insert into @t select 9, 89 
insert into @t select 10,110 
--默認in語句中sql會按照id進行排序 
select * from @t where id in(2,4,3) 
--用此方法可以按照我們傳入的id順序進行顯示數據 
select * from @t where id in(2,4,3) order by charindex(rtrim(id),',2,4,3,') 

----------------------------在in語句中只用自定義排序end--------------------------------

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色综合久久天天综合 | 皇上撞着太子妃的秘密小说 | 亚洲精品国产在线 | 91aaa免费免费国产在线观看 | 欧美高清一级 | 动漫人物差差插曲漫画 | 日韩欧美一区二区三区视频 | 国产91在线精品 | 日本一区二区三区国产 | 国产老村长足疗店对白 | 日本护士xxxx爽爽爽 | yy111111免费观看 | 99视频免费在线 | 国产精亚洲视频 | 亚洲精品AV无码喷奶水糖心 | 拍拍叫痛的无挡视频免费 | 亚洲精品91大神在线观看 | 交换性关系中文字幕6 | 91精品啪在线观看国产日本 | www国产精品 | 亚洲欧美一 | 日本欧美强乱视频在线 | 日本高清va不卡视频在线观看 | 污小说在线阅读 | 色综合天天娱乐综合网 | 免费片在线观看高清 | 国产免费看黄的私人影院 | 国产精品亚洲精品观看不卡 | 日本视频高清免费观看xxx | 91在线视频国产 | 甜蜜惩罚小说 | 免费刷10000名片赞网站 | 三年片韩国在线观看 | 亚洲欧美日韩另类在线一 | ova巨公主催眠1在线观看 | 色综合久久夜色精品国产 | 午夜性爽视频男人的天堂在线 | 99ri国产在线观看 | zol中关村在线 | 蜜臀91| 91国语自产拍在线观看 |