在SQL Server 2005中,它的另外一個強大的新特點是資料庫快照。資料庫快照是一個資料庫的只讀副本,它是資料庫所有數據的映射,由快照被執行的時間點來決定它的內容。
這些資料庫快照在報表方面是非常有價值,因為在快照資料庫中或者在原資料庫中,對於任何查詢而言沒有鎖就將被執行。快照也可以使用在災難恢復中,因為你可以將現有的數據恢復到現有的快照中,或者還可以在有害數據操作聲明的事件中存儲個別必要的表和數據。
資料庫快照是如何工作的?
可以使用典型的資料庫命令CREATE DATABASE語句來生成一個資料庫快照,在聲明中有一個源資料庫快照的附加說明。當快照被建立時,同時生成一個稀疏文件。這個文件(只能使用在NTFS卷中)在初始化的時候並沒有磁碟空間分配給它——盡管你可能在WINDOWS資源管理器中看到了文件的大小,它會看上去與原始的源資料庫文件的大小相同。對磁碟來說其實這個文件的大小接近於零。
資料庫快照在初始化時讀的數據文件是來自於源資料庫的。當源資料庫的數據發生變化時,數據引擎就會將原始數據從源資料庫拷貝到快照資料庫中。這個技術確保快照資料庫只反映快照被執行時數據的狀態。當SELECT命令被用來發布反對資料庫快照時,不管數據頁的讀取是否被定位在源資料庫數據文件中還是在快照資料庫數據文件中都是沒有鎖被發布的。因為在只讀資料庫快照中是沒有鎖被發布,資料庫快照對於報表解決方案是一個重要的解決方案。
一個快照的實例
現在,讓我們來看看資料庫快照在SQL Server 2005中是如何工作的。為此,首先我需要一個源資料庫作為快照的來源。下面的腳本將創建一個源資料庫:
以下為引用的內容:
USE master
GO
IF EXISTS(SELECT name from sysdatabases where [name] = 'SourceDatabase')
DROP DATABASE SourceDatabase
GO
CREATE DATABASE SourceDatabaseON PRIMARY
(
NAME = SourceDatabase_Data,
FILENAME = 'C:SQLServerSourceDatabase_Data.mdf'
) LOG ON
(
NAME = SourceDatabase_Log,
FILENAME = 'C:SQLServerSourceDatabase_Log.ldf'
)
GO
注意這里產品區域的大小。我定義它的大小為CHAR(150)來強調數據文件的增長級數,這樣在我接下來的實例中將更容易解釋清楚快照是如何工作的。
現在既然我已經有了一個源資料庫,現在我裝載一些數據來擴展數據文件的大小位。如此,使用列表1中的腳本來創建銷售歷史表。
以下為引用的內容:
USE SourceDatabase
GO
IF OBJECT_ID('SalesHistory')>0 DROP TABLE SalesHistory
GO
CREATE TABLE SalesHistory
( SaleID INT IDENTITY(1,1),
Proct CHAR(150), SaleDate DATETIME,
SalePrice MONEY
)
DECLARE @i INT
SET @i = 1
WHILE (@i <=10000)
BEGIN INSERT INTO SalesHistory (Proct, SaleDate, SalePrice)
VALUES ('Computer', DATEADD(mm, @i, '3/11/1919'),
DATEPART(ms, GETDATE()) + (@i + 57) )
INSERT INTO SalesHistory (Proct, SaleDate, SalePrice)
VALUES ('BigScreen', DATEADD(mm, @i, '3/11/1927'),
DATEPART(ms, GETDATE()) + (@i + 13) )
INSERT INTO SalesHistory (Proct, SaleDate, SalePrice)
VALUES ('PoolTable', DATEADD(mm, @i, '3/11/1908'),
DATEPART(ms, GETDATE()) + (@i + 29) )
SET @i = @i + 1
END
GO
② sqlserver數據怎麼報表
select * from 表名 where tdate='日期'查找莫一時間的數據,你的問題描述不清楚呀,如果調出來,可把查出來的數據復制出來即可
③ 請問這個報表要怎麼生成
用"Excel",很方便。
④ sqlserver 統計報表的 sql語句怎麼寫
--動態語句
declare@sqlvarchar(8000)
select@sql=isnull(@sql+'],[','')+NAMEfromT_CSDN_ONEgroupbyNAME
set@sql='['+@sql+']'
EXEC('select*from(select*fromT_CSDN_ONE)apivot(SUM(ISNULL(MONERY,0)forNAMEin('+@sql+'))b')
⑤ 如何創建SQLSERVER資料庫維護計劃
步驟1:打開企業管理器,如下。
2
步驟2:點擊管理,新建資料庫維護計劃,進入向導,選擇下一步。
3
步驟3:選擇資料庫PUBS,點擊下一步。
4
步驟4:更新資料庫優化信息。可以進行資料庫文件空間設置。我們點擊更改進行調度設置。
5
步驟5: 可以通過修改調度,對作業時間參數進行設置。
步驟6:檢查資料庫完整性。
步驟7:指定資料庫備份計劃。
步驟8:可以編輯調度。
步驟9:指定備份目錄,可以選擇路徑,刪除時間和擴展名。
步驟10:指定事務日誌備份計劃。
步驟11:報表。
步驟12:維護計劃歷史。
步驟13:資料庫維護計劃完成向導。
步驟14:資料庫維護設置的最終結果如下:
資料庫
pubs
伺服器
(local)
優化
每 1 周在 星期日 發生,在 1:00:00。
執行下列操作:
當資料庫的大小超過 50 MB 時收縮資料庫。保留 10 % 的數據空間作為可用空間。
INTEGRITY CHECKS
每 1 周在 星期日 發生,在 0:00:00。
執行下列操作:
檢查資料庫
完全備份
每 1 周在 星期日 發生,在 2:00:00。
備份媒體: 磁碟
備份目的: C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP
刪除 4 周 之前的備份文件。
完成後驗證備份。
為每個資料庫創建子目錄以便存儲備份文件。
事務日誌備份
每 1 周在 星期一,星期二,星期三,星期四,星期五,星期六 發生,在 0:00:00。
備份媒體: 磁碟
備份目的: C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP
刪除 4 周 之前的備份文件。
完成後驗證備份。
為每個資料庫創建子目錄以便存儲備份文件。
生成並存儲報表的目錄為: C:\Program Files\Microsoft SQL Server\MSSQL\LOG\
步驟14:資料庫維護計劃完成。
⑥ 怎樣在SQLServer中正確使用參數報表
一、帶報表參數的典型應用。
在一個報表中加入參數,最直接的結果就是可以提高查詢語句的重復利用性。如用戶可以通過更改參數來調整顯示的結果等等。對於這些常規的應用筆者不做過多的闡述。筆者現在要說的是,帶參數報表的一些高級應用。
參數報表比較高級的應用就是實現報表鑽取。鑽取是改變維的層次,變換分析的粒度。它包括向上鑽取和向下鑽取。向上鑽取是在某一維上將低層次的細節數據概括到高層次的匯總數據,或者減少維數;向下鑽取是指自動生成匯總行的分析方法。簡單的說,現在資料庫中有一張銷售訂單表。根據這張表可以生成一張各個月份的銷售統計表。但是,有可能用戶在查看這張報表的時候,對某個月份的統計結果有懷疑,為此需要查看這個月份的銷售明細。此時如果利用帶參數的報表實現鑽取功能的話,那麼就不需要重新查詢或者生成報表。而只需要直接在這張報表上點擊月份,系統就會自動打開另外一張報表。這張報表中的內容就是這月份的銷售明細。從技術的角度講,就是通過參數的傳遞,將這張報表的時間信息作為另一張報表的查詢參數。從而讓系統自動根據這個參數來生成相應的數據,從而簡化用戶的操作。
二、帶參數報表要避免注入式攻擊。
在使用參數報表的時候,特別需要注意一點就是防止注入式攻擊。注入式攻擊各位讀者或許都了解。可是對於為什麼使用參數的報表容易引起注入式攻擊,可能大家並不怎麼了解。這主要是因為參數如果採用的是string數據類型所造成的。即如果參數採用的是string數據類型,那麼就表示用戶可以根據需要輸入任何類型的字元串。此時如果用戶輸入了一些注入式攻擊的代碼當作參數,則就可能會導致注入式攻擊。為此如果生成報表時,採用的參數時String數據類型的,就需要特別的注意。為了防止這個注入式攻擊,筆者建議如果採用的參數一定要是String數據類型的話,那麼最好能夠遵循下面的規則。DB2資料庫與SQLServer資料庫的異同
首先,在客戶端將報表查詢語句傳遞給資料庫之前,即將參數復制給Select語句之前,最好進行驗證。即要驗證輸入的參數值中,是否存在一些特殊的符號。這些符號往往跟輸入攻擊有關。如果存在這些特殊字元的話,則需要向用戶提供警告信息,表明存在注入式攻擊的可能性。並且,系統可以拒絕接受這個參數。這個避免注入式攻擊的方法比較消極。如果這些特殊符號確實是查詢參數中包含的內容,那麼也無法使用。
其次,可以通過值列表的方式來向資料庫傳遞參數。在沒有提供值列表的情況下,如果參數是字元類型的,則系統向用戶顯示的是一個可以使用任何值的文本框。此時資料庫管理員可以使用可用值列表的方式來規范化參數的輸入,限制其輸入一些特殊的字元。也就是說,在定義String類型的參數報表時,讓系統向用戶顯示一個下拉的列表框,然後用戶通過選擇來指定參數。這個操作就跟Excel表格中的下拉列框差不多,用戶只能夠選擇資料庫管理員所提供的值,或者說只能夠選擇某張表中存在的值。由於用戶不能夠自己輸入值,而只能夠選擇,這就可以有效的避免注入式攻擊。不過採用這種方式有一個缺陷,就是如果有效的值太多的話,這個列表就會很長。為此用戶在選擇參數的時候,就會很麻煩。如當有效值有500個的話,那麼就需要在500個值中選擇一個值,顯然這有點困難。即使按照參數的名字順序來排列,選擇也是比較麻煩的。大內存SQLServer資料庫的加速劑
第三,可以利用列表查詢的方式,來避免注入式攻擊。即當用戶輸入一個參數之後,系統會自動從一個列表中查詢是否存在這個值。如果存在的話,則將這個參數賦值給查詢語句中的變數。如果不存在的話則提醒用戶參數可能輸入錯誤。如現在有一張銷售訂單明細報表。用戶可能需要根據訂單號碼來查詢銷售訂單明細。此時這個訂單號碼就是一個字元型的參數。當用戶輸入這個參數的時候,並不是馬上傳遞給資料庫,這么做太危險,容易產生注入式攻擊。而是前台應用程序也從後台資料庫中取得所有的銷售訂單的訂單號碼信息。當用戶輸入參數之後,前台應用程序會把這個用戶輸入的參數跟自己查詢出來的信息先進行對比。如果有匹配的信息,就將這個參數傳遞給後台資料庫。如果沒有的話,就向用戶報告錯誤的信息。有些應用程序在設計的時候,還會更進一步。如客戶端程序會先從資料庫中取得訂單號碼與對應的訂單ID。當用戶輸入參數之後,會進行比對。如果比對成功的話,那麼客戶端應用程序會將這個訂單號碼對應的訂單ID作為參數傳遞給查詢語句。也就是說,從資料庫伺服器角度來講,真正的參數是訂單ID(整數型數據類型)而不是訂單號碼(字元串數據類型)。通過這個數據類型轉換,從而可以從根本上防止注入式的攻擊。
以上三種方式都可以很有效的避免注入式攻擊。資料庫管理員需要根據實際應用來選擇合適的解決方案。如當有效值比較少的時候,如按年份來統計銷售訂單時,則可以使用列表的形式。當有效值比較多,特別是這個有效值會自動增長的時候,則可以使用列表查詢的方式。總之一個基本的原則,對於String參數,一定要進行驗證其合法性。否則的話,很容易造成注入式攻擊。
三、對於日期型的數據給與特殊的照顧。
日期型的數據是資料庫中最容易出現問題的一個數據類型。因為不同語言環境下,如英語與漢語環境下,其採用的日期格式是不同的。如果資料庫中定義了某個日期格式,而輸入的參數如果不符合這個格式的話,則系統就會認為這條記錄不存在,從而在報表中查詢不到相關的數據。為此如果在報表中要使用日期型數據參數的話,將會是一件比較麻煩的事情。所以,在應用程序設計時,資料庫管理員最好提醒前台應用程序的設計者,能夠規范化日期的格式。如可以要求他們,對於日期型的數據作為參數時,用戶不能夠手工輸入日期。因為不同的用戶輸入習慣不同,如有些人會按年月日的格式輸入(有些用戶會把8月份寫成08,而有些直接寫成8),有些人則會按月、日、年的格式進行輸入。由於格式不統一,那麼資料庫就很難按照同一個規則進行轉換。為此,對於日期型的數據作為參數時,最好在前台應用程序中能夠規范化輸入的格式。如以一個統計的格式輸入。要做到這一點的話,就可以通過一個日期型的控制項來完成。即用戶不能夠手工輸入日期型的數據。當遇到某個參數時日期型的數據時,當滑鼠定位到這個文本框,則系統就會彈出一個類似日歷的界面。用戶只有通過選擇日期來輸入日期型的數據,從而規范化用戶的輸入。另外也可以通過掩碼的方式來規范用戶輸入的格式。即預先規定年月日的輸入掩碼。用戶在輸入的時候必須按照這個格式,否則的話,系統不會接受用戶的輸入。這兩種方式都可以實現對日期數據的規范化。
當用戶按照同一個格式輸入日期數據後,以後的工作就容易處理了。在將參數傳遞給資料庫的時候,可以在查詢語句中加入一個日期型數據的強制轉換語句。將輸入的日期型數據按照系統表中定義的日期型數據進行轉換。即如果前台客戶端輸入的日期型數據格式是日、月、年(只要輸入的內容統一即可,沒有具體的要求),然後在查詢語句中就可以通過數據類型轉換工具對數據類型進行轉換。如將日、月、年表示的字元型數據類型表示會年、月、日的日期型數據類型。如此的話,就可以保證用戶輸入的參數是資料庫可以識別的。就可以避免因為日期格式不一致或者數據類型不一致而導致報表不能夠抓取記錄。
⑦ 如何用sqlserver製作一個周報表,顯示出一周內,每天的數據
這需要數據啊 我是做報表開發的 你至少要有日銷售數據 這樣才能製作。
⑧ sqlserver2012怎麼生成報表
1. 打開sql server 2012,創建,一個存儲過程
ALTER proc[dbo].[ProTest2]
@StartSubmitTime
varchar(200),
@EndSubmitTime
varchar(200)
as
begin
declare
@sql varchar(max)
set
@sql='select
⑨ 做一個在互聯網上發布的報表程序,都需要學什麼正式發布的時候需要什麼環境
從你的需要看你需要建一個WEB方式的報表和匯總的網站,你現在已經有了伺服器、域名,那麼你還需要的就只是一個資料庫和一個程序了,具體過程如下:
一、根據你的報表格式,設計一個資料庫,可以用sqlserver,也可直接用access建文件型資料庫,內容:一是可按報表項目確定數據主表,另加一些標志項,如按報表周期加年月項、單位代碼等,二是用戶表,用來存儲用戶名稱、代碼、密碼等,進進行增刪改查的用戶鑒權,三是日誌表,用於存儲用戶活動記錄。
二、撰寫網頁代碼。語言基於HTML,加ASP、java或.net等均可,最快捷的辦法是直接下載一個範例代碼,然後改一改,會快一些。
三、將寫好的代碼,放在WEB伺服器上,調試一下,應該很容易。
開發環境很簡單:一個PC機裝一個IIS就可以了,如果用到sqlserver就再安裝一個資料庫軟體,但不熟悉的話,建議用MDB資料庫,一個資料庫文件直接放到伺服器上,簡單,數據量不大的完全可以勝任,另外寫代碼你可以用frontpage來做,很快、很直觀。