SQL用法總結
--=======================checkspacesandcleandata====================================--checkalldbsspacesp_helpdb
--checkalltablesspace
createtable#test(namevarchar(50),rowsint,reservedvarchar(20),datavarchar(20),index_sizevarchar(20),unusedvarchar(20))
insertinto#test
execsp_MSforeachtable"execsp_spaceused"?""
select*from#testorderbycast(replace(reserved,"KB","")asint)desc
droptable#test
--cleanalltabledata/*
execsp_MSforeachtable"deletefrom?"execsp_MSforeachtable"truncatetable?"*/
--========================處理日志====================================--由于SQL201*對文件和日志管理進行了優(yōu)化,所以以下語句在SQL201*中可以運行但在SQL201*中已經(jīng)被取消:--SQL201*/*
BackupLogDNNamewithno_log
DumpTransactionDNNamewithno_log
DBCCSHRINKFILE(2)*/
--SQL201*
--在SQL201*中清除日志就必須在簡單模式下進行,等清除動作完畢再調回到完全模式.
ALTERDATABASEDNNameSETRECOVERYSIMPLE--WITHNO_WAIT簡單模式
DBCCSHRINKFILE("DNName_Log",EMPTYFILE,TRUNCATEONLY)--DBCCSHRINKFILE("DNName_Log",1,TRUNCATEONLY)
ALTERDATABASEDNNameSETRECOVERYFULL--WITHNO_WAIT還原為完全模式
--優(yōu)點:此清除日志所運行消耗的時間短,90GB的日志在分鐘左右即可清除完畢,做完之后做個完全備份在分鐘內即可完成.
--缺點:不過此動作最好不要經(jīng)常使用,因為它的運行會帶來系統(tǒng)碎片.普通狀態(tài)下LOG和DIFF的備份即可截斷日志.
--此語句使用的恰當環(huán)境:當系統(tǒng)的日志文件異常增大或者備份LOG時間太長可能影響生產的情況下使用.
--========================Rankingwindow
functions====================================--runonAdventureWorks
--UsingtheOVERclausewithaggregatefunctionsSELECTSalesOrderID,ProductID,OrderQty
,SUM(OrderQty)OVER(PARTITIONBYSalesOrderID)AS"Total",AVG(OrderQty)OVER(PARTITIONBYSalesOrderID)AS"Avg"
,COUNT(OrderQty)OVER(PARTITIONBYSalesOrderID)AS"Count",MIN(OrderQty)OVER(PARTITIONBYSalesOrderID)AS"Min",MAX(OrderQty)OVER(PARTITIONBYSalesOrderID)AS"Max"
,CAST(1.*OrderQty/SUM(OrderQty)OVER(PARTITIONBYSalesOrderID)*100ASDECIMAL(5,2))AS"PercentbyProductID"FROMSales.SalesOrderDetail
WHERESalesOrderIDIN(43659,43664)
--UsingtheOVERclausewiththeROW_NUMBERfunctionSELECTc.FirstName,c.LastName
,ROW_NUMBER()OVER(partitionbyPostalCodeORDERBYSalesYTDDESC)AS"RowNumber"
,s.SalesYTD,a.PostalCodeFROMSales.SalesPersons
INNERJOINPerson.Contactc
ONs.SalesPersonID=c.ContactIDINNERJOINPerson.Addressa
ONa.AddressID=c.ContactIDWHERETerritoryIDISNOTNULLANDSalesYTD0
SELECTc.FirstName,c.LastName
,ROW_NUMBER()OVER(ORDERBYa.PostalCode)AS"RowNumber",RANK()OVER(ORDERBYa.PostalCode)AS"Rank"
,DENSE_RANK()OVER(ORDERBYa.PostalCode)AS"DenseRank",NTILE(4)OVER(ORDERBYa.PostalCode)AS"Quartile",s.SalesYTD,a.PostalCodeFROMSales.SalesPersons
INNERJOINPerson.Contactc
ONs.SalesPersonID=c.ContactIDINNERJOINPerson.Addressa
ONa.AddressID=c.ContactIDWHERETerritoryIDISNOTNULLANDSalesYTD0
--=======================CreatePartitionondatabase====================================
--1.AddfilegroupsandfilestodatabaseALTERDATABASETestADDfilegrouptestFg1
ALTERDATABASETestADDFILE(NAME=test1,FILENAME="C:\\ProgramFiles\\MicrosoftSQL
Server\\MSSQL10.MSSQLSERVER\\MSSQL\\DATA\\test1.ndf",SIZE=3MB,MAXSIZE=UNLIMITED,FILEGROWTH=1MB
)TOFILEGROUPtestFg
ALTERDATABASETestADDfilegrouptestFg2
ALTERDATABASETestADDFILE(NAME=test1,FILENAME="C:\\ProgramFiles\\MicrosoftSQL
Server\\MSSQL10.MSSQLSERVER\\MSSQL\\DATA\\test2.ndf",SIZE=3MB,MAXSIZE=UNLIMITED,FILEGROWTH=1MB
)TOFILEGROUPtestFg2GO
--2.createpartitionfunctionandschemeCREATEPARTITIONFUNCTIONmyRangePF1(int)
ASRANGERIGHTFORVALUES(201*0101,201*0101,201*0101);GO
CREATEPARTITIONSCHEMEmyRangePS1ASPARTITIONmyRangePF1
TO([PRIMARY],testFg1,testFg2,testFg3)
--3.applypartitionontable/*
CREATETABLEPartitionTable(col1int,col2char(10))ONmyRangePS1(col1)
select*fromsys.partition_functions
select*fromsys.partition_schemes
select*fromsys.partition_range_values
--checkrowsoneverypartitionselect*fromsys.partitionswhereobject_id=*/
BEGINTRANSACTION
CREATECLUSTEREDINDEX[ClusteredIndex_on_myRangePS1]ON[dbo].[factCharge]([DateKey]
)WITH(SORT_IN_TEMPDB=OFF,IGNORE_DUP_KEY=OFF,DROP_EXISTING=OFF,ONLINE=OFF)ON[myRangePS1]([DateKey])
DROPINDEX[ClusteredIndex_on_myRangePS1]ON[dbo].[factChargeBak]WITH(ONLINE=OFF)
COMMITTRANSACTION
--=======================SQLCDC====================================USEAdventureWorksDW;GO
EXECUTEsys.sp_cdc_enable_db;--啟用數(shù)據(jù)庫對CDC的支持GOEXECsys.sp_cdc_enable_table"dbo","FactInternetSales",@role_name=NULL,@supports_net_changes=0;--啟用某個表對CDC的支持GO
SELECTname,is_tracked_by_cdcFROMsys.tablesWHEREnameLIKE("fact%")
INSERTINTOFactInternetSales
VALUES(484,1127,1139,1134,18759,1,100,6,"SO75124",1,1,1,21.9800,21.9800,0,0,8.2205,8.2205,21.9800,1.7584,0.5495,NULL,NULL)INSERTINTOFactInternetSales
VALUES(486,1127,1139,1134,18759,1,100,6,"SO75125",1,1,1,21.9800,21.9800,0,0,8.2205,8.2205,21.9800,1.7584,0.5495,NULL,NULL)
UPDATEFactInternetSalesSETPromotionKey=2WHERESalesOrderNumber="SO75124"
DELETEFROMFactInternetSalesWHERESalesOrderNumber="SO75125"SELECT*FROMcdc.dbo_FactInternetSales_CT;
DECLARE@begin_timedatetime,@end_timedatetime,@from_lsnbinary(10),@to_lsnbinary(10);
--Obtainthebeginningofthetimeinterval.SET@begin_time=GETDATE()-1SET@end_time=GETDATE()
--Mapthetimeintervaltoachangedatacapturequeryrange.
SELECT@from_lsn=sys.fn_cdc_map_time_to_lsn("smallestgreaterthanorequal",@begin_time)
SELECT@to_lsn=sys.fn_cdc_map_time_to_lsn("largestlessthanorequal",@end_time)
print@begin_timeprint@end_timeprint@from_lsnprint@to_lsn
SELECT*FROMcdc.dbo_FactInternetSales_CTWHERE__$start_lsnBETWEEN@from_lsnAND@to_lsn
--撤銷SQLServer201*CDC
EXECsys.sp_cdc_disable_table"dbo","FactInternetSales","All"EXECsys.sp_cdc_disable_db
--=======================Convertinttomoney====================================
SELECTREVERSE(SUBSTRING(REVERSE(CONVERT(varchar,CONVERT(money,123456789),1)),4,30))RMB
擴展閱讀:SQL的一些用法小結
SQL的一些用法小結(精彩實用)
1.模糊查詢:select*from表名where查詢字段like"%biao_"%通配符--匹配任意字符_通配符--匹配單個字符
2.字符串的連接(||):select字段1||","||字段2別名from表名輸出:字段1,字段2
3.查找非空項:select*from表名where字段isnotnull4.集合查詢:
union返回兩個查詢的結果并去除其中的重復部分:select字段1from表1unionselect字段1from表2
unionall與union一樣對表進行了合并但是它不去掉重復的記錄:select字段1from表1unionallselect字段1from表2
intersect(相交)返回兩個表中共有的行:select字段1from表1intersectselect字段1from表2
mimus(相減)返回的記錄是存在于第一個表中但不存在于第二個表中的記錄例:select字段1from表1mimusselect字段1from表25.從屬運算(in,between)
select*from表where字段in("值1","值2",-----)----括號內是數(shù)字則不需要用引號
select*from表where字段betweenMinandMax二.函數(shù)
1.count:該函數(shù)將返回滿足WHERE條件子句中記錄的個數(shù)selectcount(*)from表where條件2.sum返回某一列的所有數(shù)值的和selectsum(字段)from表3.avg可以返回某一列的平均值selectavg(字段)from表
4.max(min)取得某一列中的最大(小)值selectmax(字段)from表
select*from表where字段=min(字段)
@_@(太多了,不一一列舉了,弄些自己喜歡的^_^)----------------5.user該函數(shù)返回當前使用數(shù)據(jù)庫的用戶的名字selectuser[from表]三.子句
1.groupby用于分組
selectsum(字段1)from表groupby字段2having條件------按照字段2進行分組顯示
2.having在分組中設置條件
四.子查詢(子查詢的條件可以關聯(lián)主表和子表)
select*from表1where字段=(select字段from表2條件)---子查詢的結果必須是唯一
select*from表1where字段in(select字段from表2條件)----子查詢的結果不唯一
select*from表1whereexists(select........)-----exists返回trueorfalse五.精彩語句:
insertinto表1(字段1,字段2....)select字段1,字段2.....from表2條件-----復制表六.創(chuàng)建和操作表1.創(chuàng)建表:CREATETABLEtable_name(field1datatype[NOTNULL]
field2datatype[NOTNULL]
field3datatype[NOTNULL]...)
2.ALTERTABLE語句可以幫助你做兩件事-加入一列到已經(jīng)存在的表中-修改已經(jīng)存在的表中的某一列
ALTERTABLE語句的語法如下
ALTERTABLEtable_name-------修改一列3.刪除表和數(shù)據(jù)庫:
DROPTABLEtable_nameDROPDATABASEdatabase_name4.創(chuàng)建臨時表:
createtable#table_name(field1datatype,
.fieldndatatype七,存貯過程:創(chuàng)建存貯過程的語法:
createprocedureprocedure_name[[(]@parameter_name
datatype[(length)|(precision[,scale])[=
default][output]-----------參數(shù)
[,@parameter_name
datatype[(length)|(precision[,scale])[=default][output]]...[)]][withrecompile]asSQL_statements運行存貯過程的EXECUTE命令的語法:execute[@return_status=]procedure_name
[[@parameter_name=]value
|------------參數(shù)值
[@parameter_name=]@variable[output]...]][withrecompile]八.SQLSERVER提供的全局變量:
在使用存儲過程的時候你可以自己定義全局變量是非常有用的SQLSERVER也提供
了幾種系統(tǒng)全局變量對于數(shù)據(jù)庫的系統(tǒng)用戶來說它可能是有用的下表中給出了這些變
量的全部清單你可以在SQLSERVERSYSTEM10的文檔中找到它變量名作用
@@char_convert如果字符轉換成功時其值為0@@client_csid客戶機所使用字符集的
ID@@client_csname客戶機的字符集的名字
@@connections從SQLServer啟動以來的登錄次數(shù)
@@cpu_busy從SQLServer啟動以來的CPU忙的時間總數(shù)@@error錯誤的狀態(tài)
@@identity插入到確定列中的最后一個值@@idle從SQLServer啟動以來的總時間數(shù)@@io_busySQLServer用于I/O操作的時間
@@isolation當前的Transact-SQL程序的隔離級別@@langid定義了本地語言的ID號@@language定義了本地語言的名稱@@maxcharlen字符的最大長度
@@max_connections可與SQLSERVER進行連接的最大數(shù)量@@ncharsizeAveragelengthofanationalcharacter.@@nestlevel當前進程的嵌套級別
@@pack_received從SQLServer啟動以來的讀入的數(shù)據(jù)包的數(shù)量@@pack_sent從SQLServer所發(fā)出的輸出包的數(shù)量
@@packet_errors從SQLServer啟動以來產生錯誤的數(shù)量@@procid當前正在運行的存儲過程的ID號@@rowcount上一個命令所涉及的行數(shù)
@@servername本地localSQLServer的名字@@spid當前正在處理的進程ID號@@sqlstatus存儲狀態(tài)信息
@@textsize由SELECT語句所返回的文本映像的最大長度@@thresh_hysteresisChangeinfreespacerequiredtoactivateathreshold.@@timeticksNumberofmicrosecondspertick.@@total_errors在讀寫過程中產生的錯誤數(shù)
@@total_read在SQLServer啟動以來讀磁盤的次數(shù)@@total_write在SQLServer啟動以來寫磁盤的次數(shù)@@tranchained在Transact-SQL程序中當前事務的模式@@trancount事務的嵌套級別
@@transtate當一個語句運行后當前事務的狀態(tài)@@version當前SQLServer的版本日期
友情提示:本文中關于《SQL用法總結》給出的范例僅供您參考拓展思維使用,SQL用法總結:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產生版權問題,請聯(lián)系我們及時刪除。