日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库SQL,技巧篇

發布時間:2023/12/10 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库SQL,技巧篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

三、技巧

1、1=1,1=2的使用,在SQL語句組合時用的較多

“where?1=1”?是表示選擇全部????“where?1=2”全部不選,
如:
if?@strWhere?!=''?
begin
set?@strSQL?=?'select?count(*)?as?Total?from?['?+?@tblName?+?']?where?'?+?@strWhere?
end
else?
begin
set?@strSQL?=?'select?count(*)?as?Total?from?['?+?@tblName?+?']'?
end?

我們可以直接寫成

錯誤!未找到目錄項。
set?@strSQL?=?'select?count(*)?as?Total?from?['?+?@tblName?+?']?where?1=1?安定?'+?@strWhere?2、收縮數據庫
--重建索引
DBCC?REINDEX
DBCC?INDEXDEFRAG
--收縮數據和日志
DBCC?SHRINKDB
DBCC?SHRINKFILE

3、壓縮數據庫
dbcc?shrinkdatabase(dbname)

4、轉移數據庫給新用戶以已存在用戶權限
exec?sp_change_users_login?'update_one','newname','oldname'
go

5、檢查備份集
RESTORE?VERIFYONLY?from?disk='E:\dvbbs.bak'

6、修復數據庫
ALTER?DATABASE?[dvbbs]?SET?SINGLE_USER
GO
DBCC?CHECKDB('dvbbs',repair_allow_data_loss)?WITH?TABLOCK
GO
ALTER?DATABASE?[dvbbs]?SET?MULTI_USER
GO

7、日志清除
SET?NOCOUNT?ON
DECLARE?@LogicalFileName?sysname,
?@MaxMinutes?INT,
?@NewSize?INT


USE?tablename?--?要操作的數據庫名
SELECT??@LogicalFileName?=?'tablename_log',?--?日志文件名
@MaxMinutes?=?10,?--?Limit?on?time?allowed?to?wrap?log.
?@NewSize?=?1??--?你想設定的日志文件的大小(M)

Setup?/?initialize
DECLARE?@OriginalSize?int
SELECT?@OriginalSize?=?size?
?FROM?sysfiles
?WHERE?name?=?@LogicalFileName
SELECT?'Original?Size?of?'?+?db_name()?+?'?LOG?is?'?+?
?CONVERT(VARCHAR(30),@OriginalSize)?+?'?8K?pages?or?'?+?
?CONVERT(VARCHAR(30),(@OriginalSize*8/1024))?+?'MB'
?FROM?sysfiles
?WHERE?name?=?@LogicalFileName
CREATE?TABLE?DummyTrans
?(DummyColumn?char?(8000)?not?null)


DECLARE?@Counter????INT,
?@StartTime?DATETIME,
?@TruncLog???VARCHAR(255)
SELECT?@StartTime?=?GETDATE(),
?@TruncLog?=?'BACKUP?LOG?'?+?db_name()?+?'?WITH?TRUNCATE_ONLY'

DBCC?SHRINKFILE?(@LogicalFileName,?@NewSize)
EXEC?(@TruncLog)
--?Wrap?the?log?if?necessary.
WHILE?@MaxMinutes?>?DATEDIFF?(mi,?@StartTime,?GETDATE())?--?time?has?not?expired
?AND?@OriginalSize?=?(SELECT?size?FROM?sysfiles?WHERE?name?=?@LogicalFileName)??
?AND?(@OriginalSize?*?8?/1024)?>?@NewSize??
?BEGIN?--?Outer?loop.
SELECT?@Counter?=?0
?WHILE???((@Counter?<?@OriginalSize?/?16)?AND?(@Counter?<?50000))
?BEGIN?--?update
?INSERT?DummyTrans?VALUES?('Fill?Log')?DELETE?DummyTrans
?SELECT?@Counter?=?@Counter?+?1
?END
?EXEC?(@TruncLog)??
?END
SELECT?'Final?Size?of?'?+?db_name()?+?'?LOG?is?'?+
?CONVERT(VARCHAR(30),size)?+?'?8K?pages?or?'?+?
?CONVERT(VARCHAR(30),(size*8/1024))?+?'MB'
?FROM?sysfiles?
?WHERE?name?=?@LogicalFileName
DROP?TABLE?DummyTrans
SET?NOCOUNT?OFF?

8、更改某個表
exec?sp_changeobjectowner?'tablename','dbo'

9、存儲更改全部表

CREATE?PROCEDURE?dbo.User_ChangeObjectOwnerBatch
@OldOwner?as?NVARCHAR(128),
@NewOwner?as?NVARCHAR(128)
AS

DECLARE?@Name????as?NVARCHAR(128)
DECLARE?@Owner???as?NVARCHAR(128)
DECLARE?@OwnerName???as?NVARCHAR(128)

DECLARE?curObject?CURSOR?FOR?
select?'Name'????=?name,
???'Owner'????=?user_name(uid)
from?sysobjects
where?user_name(uid)=@OldOwner
order?by?name

OPEN???curObject
FETCH?NEXT?FROM?curObject?INTO?@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?curObject?INTO?@Name,?@Owner
END

close?curObject
deallocate?curObject
GO


10、SQL?SERVER中直接循環寫入數據
declare?@i?int
set?@i=1
while?@i<30
begin
????insert?into?test?(userid)?values(@i)
????set?@i=@i+1
end
案例
有如下表,要求就裱中所有沒有及格的成績,在每次增長0.1的基礎上,使他們剛好及格:

Name?????score

Zhangshan80

Lishi???????59

Wangwu??????50

Songquan69

while((select?min(score)?from?tb_table)<60)

begin

update?tb_table?set?score?=score*1.01?

where?score<60

if??(select?min(score)?from?tb_table)>60

??break

?else

????continue

end

?


轉載于:https://blog.51cto.com/sunnyting/1559584

總結

以上是生活随笔為你收集整理的数据库SQL,技巧篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。