轉(zhuǎn)載的,能用!
創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目做網(wǎng)站、網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元和平做網(wǎng)站,已為上家服務(wù),為和平各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
------------
CREATE PROCEDURE Pagination
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 頁尺寸
@PageIndex int = 1, -- 頁碼
@doCount bit = 0, -- 返回記錄總數(shù), 非 0 值則返回
@OrderType bit = 0, -- 設(shè)置排序類型, 非 0 值則降序
@strWhere varchar(1500) = '' -- 查詢條件 (注意: 不要加 where)
AS
declare @d datetime
set @d=getdate()
declare @strSQL varchar(5000) -- 主語句
declare @strTmp varchar(110) -- 臨時變量
declare @strOrder varchar(400) -- 排序類型
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = 'select count(*) as Total from ['+ @tblName +'] where '+ @strWhere
else
set @strSQL = 'select count(*) as Total from ['+ @tblName +']'
end
--以上代碼的意思是如果@doCount傳遞過來的不是0,就執(zhí)行總數(shù)統(tǒng)計。以下的所有代碼都
--是@doCount為0的情況
else
begin
if @OrderType != 0
begin
set @strTmp = '(select min'
set @strOrder = ' order by ['+ @fldName +'] desc'
--如果@OrderType不是0,就執(zhí)行降序,這句很重要!
end
else
begin
set @strTmp = '(select max'
set @strOrder = ' order by ['+ @fldName +'] asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName +'] where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName +'] '+ @strOrder
--如果是第一頁就執(zhí)行以上代碼,這樣會加快執(zhí)行速度
end
else
begin
--以下代碼賦予了@strSQL以真正執(zhí)行的SQL代碼
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName +'] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + '])
from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from ['+ @tblName +']' + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName +'] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + ']
from ['+ @tblName +'] where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
exec ( @strSQL)
select datediff(ms,@d,getdate()) as 查詢時間毫秒
go
Pagination 'CopyrightInformation','*','id',120,45667,0,0,''
1、打開SqlServer數(shù)據(jù)庫,選中要備份的數(shù)據(jù)庫,【右鍵】選擇【任務(wù)】,點擊【備份】。
2、輸入【數(shù)據(jù)集】名稱,選擇備份路徑,點擊【確定】就完成了數(shù)據(jù)庫的備份。
3、【右鍵】選擇【任務(wù)】,點擊【還原】,選擇【數(shù)據(jù)庫】。
4、選擇之前備份的數(shù)據(jù)庫,點擊【確定】。
5、至此SqlServer備份還原的操作就已完成。
也許很多讀者朋友都經(jīng)歷過這樣的事情:要在開發(fā)數(shù)據(jù)庫基礎(chǔ)上清理一個空庫,但由于對數(shù)據(jù)庫結(jié)構(gòu)缺乏整體了解,在刪除一個表的記錄時,刪除不了,因為可能有外鍵約束,一個常見的數(shù)據(jù)庫結(jié)構(gòu)是一個主表,一個子表,這種情況下一般都得先刪除子表記錄,再刪除主表記錄。 1.按照先后順序逐個刪除,這個方法在表非常多的情況下顯得很不現(xiàn)實,即便是表數(shù)量不多,但約束比較多時,你還是要花費大量的時間和精力去研究其間的約束關(guān)系,然后找出先刪哪個表,再刪哪個表,最后又刪哪個表。 首先得編寫代碼循環(huán)檢查所有的表,這里我推薦一個存儲過程sp_MSForEachTable,因為在微軟的官方文檔中沒有對這個存儲過程有描述,很多開發(fā)人員也許都還未曾聽說,所以你在互聯(lián)網(wǎng)上搜索得到的解決辦法大多很復(fù)雜,也許有的人會認(rèn)為,既然沒有官方文檔,這個存儲過程可能會不穩(wěn)定,打心理上會排斥它,但事實并非如此。下面來先看一個完整的腳本: 這個腳本創(chuàng)建了一個命名為sp_DeleteAllData的存儲過程,前面兩行語句分別禁用約束和觸發(fā)器,第三條語句才是真正地刪除所有數(shù)據(jù),接下里的語句分別還原約束和觸發(fā)器,最后一條語句是顯示每個表中的記錄,當(dāng)然這條語句也可以不要,我只是想確認(rèn)一下是否清空了所有表而已。
可以完成,思路如下:
通過pid 商品編碼分組,得到銷售日期的每個月列,后用sum(case?Fact_m?WHEN?月份 then?數(shù)量end)來操作即可.
--年度售額:
select?pid?商品編碼
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'01'?then?cCost?end)),0)?'countCost_1'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'02'?then?cCost?end)),0)?'countCost_2'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'03'?then?cCost?end)),0)?'countCost_3'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'04'?then?cCost?end)),0)?'countCost_4'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'05'?then?cCost?end)),0)?'countCost_5'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'06'?then?cCost?end)),0)?'countCost_6'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'07'?then?cCost?end)),0)?'countCost_7'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'08'?then?cCost?end)),0)?'countCost_8'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'09'?then?cCost?end)),0)?'countCost_9'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'10'?then?cCost?end)),0)?'countCost_10'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'11'?then?cCost?end)),0)?'countCost_11'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'12'?then?cCost?end)),0)?'countCost_12'
,isnull(convert(dec(18,2),sum(cCost)))?'countTotal'?
from?Tab?group?by?pid?
--Fact_m?指的就是銷售日期[月],最后還有一列為年度總計
希望能幫到你!