文章轉(zhuǎn)載自: http://blog.sina.com.cn/s/blog_3eec0ced0100mhm2.html
最近經(jīng)常用到超過80M *.sql文件的導(dǎo)入問題。
上網(wǎng)找了一下,發(fā)現(xiàn)超過80M的文件是不能在查詢分析器中執(zhí)行的。
?
找了些解決方案,個人感覺最簡單的方法就是這個SQLCMD的,拿出來分享一下,也方便日后自己使用。
下面的內(nèi)容是詳細介紹sqlcmd的,有興趣的朋友可以看看
?
?
因為公司的業(yè)務(wù)需要,所以采集了一個2W多條的數(shù)據(jù),都是insert語句,生成一個200多M的數(shù)據(jù),誰料在通過sql server 2005不能直接打開,導(dǎo)入也存在問題,用記事本也打不開,復(fù)制貼也不行,最后還是一同學(xué)提了個醒用命令在dos下執(zhí)行.sql文件,才有了辦法,同時也 在一熱心網(wǎng)友的幫助下完成了這個讓我頭疼半天的活,下面我對這些做一下介紹,應(yīng)該對有這樣需要的朋友很好的幫助。
如果裝的是2000版的sql那用的命令是osql,05的用sqlcmd
其實用法很簡單,任何技術(shù),一旦說穿就失去了它的神秘,這有點像生活中的很多事,好了廢話了半天,還是切入正題,開工吧:
其實就是一句很簡單的話句:
sqlcmd -i sqlfile.sql -d databasename -s 127.0.0.1
這個sql文件要放在c:\下
就這么簡單..
sqlcmd 使用筆記
登錄sqlcmd
命令 sqlcmd -S 服務(wù)器名稱 -U 帳戶 -P 密碼
示例 sqlcmd -S "HOMESQLEXPRESS" -U "sa" -P "12345678"
直接執(zhí)行SQL Script
命令 sqlcmd -S 服務(wù)器名稱 -U 帳戶 -P 密碼 -d 數(shù)據(jù)庫 -i SQL Script
示例 sqlcmd -S "HOMESQLEXPRESS" -U "sa" -P "12345678" -d "Database" -i "E:My Documentstest.sql"
查詢當(dāng)前服務(wù)器上的數(shù)據(jù)庫
(*) 可能需要 Use Master
1. Select [Name] From sysdatabases
2. sp_helpdb
查詢當(dāng)前數(shù)據(jù)庫的表和存儲過程
表:select * from sysobjects where status >=0 and xtype='U'
存儲過程:select * from sysobjects where status >=0 and xtype='P'
------------------------
1、你可以用SQLCMD執(zhí)行交互式動作,如:
C:\sqlcmd>sqlcmd
1> SELECT name from sys.databases
2> GO
你也可以試著鍵入如下命令,現(xiàn)實服務(wù)器列表
1>:ServerList
SERVERS:
WUYZ
1>如果想看其他命令的使用,可以鍵入:Help /?
2、執(zhí)行SQL腳本文件
你可以在SQLCMD命令上加入?yún)?shù)I來執(zhí)行SQL腳本文件,例如:
C:\sqlcmd>sqlcmd -i test.sql
上面的I選項允許你執(zhí)行一個腳本文件,另外,你也可以指定O選項,把命令的輸出導(dǎo)出到指定文件,當(dāng)然,我們也可以在代碼中指定輸出結(jié)果,如下
C:\sqlcmd>sqlcmd
1> :out output.txt
2> :r test.sql
3、在腳本中使用變量
SQLCMD支持可以在腳本中接收用戶傳入的變量信息,如下面語句:
SET NOCOUNT ON
Select $(Cols) from $(tablename)
GO
上面語句請求2個參數(shù),我們可以通過指定相應(yīng)的參數(shù)信息傳給腳本,如下:
C:\sqlcmd>sqlcmd -i test.sql -o Output.txt -v cols="name,object_id,create_date" tablename="sys.objects"
上面語句的用途是:執(zhí)行TEST.SQL腳本文件,并把輸出的信息輸出到OUTPUT.TXT文件中,并分別指定了COLS,TABLENAME的參數(shù)值
4、在腳本中設(shè)置變量的值
除了通過外部傳入?yún)?shù)的值外,還可以在內(nèi)部設(shè)置參數(shù)的值,如下面例子
e:\sqlcmd\backuptemplate.sql
use master
backup database [$(db)] to disk='$(file)'
e:\sqlcmd\backupsingle.sql
:setvar db msdb
:setvar file c:\temp\msdb.bak
:r e:\sqlcmd\backuptemplate.sql
如果你想知道當(dāng)然定義了哪些變量,可以使用:listvar命令來顯示。主要命令匯總:
:r filename
:ServerList
:List
:Listvar
:Error filename | STDOUT | STDERR
:Out filename | STDOUT | STDERR
:Perftrace filename | STDOUT | STDERR
:Connect server[\instance] [timeout] [user_name[password] ]
:On Error [exit | ignore]
:SetVar variable value
:Help:XML ON | OFF
主要環(huán)境變量匯總:
-a SQLCMDPACKETSIZE
-d SQLCMDDBNAME
-H SQLCMDWORKSTATION
-h SQLCMDHEADERS
-l SQLCMDLOGINTIMEOUT
-m SQLCMDERRORLEVEL
-P SQLCMDPASSWORD
-S SQLCMSSERVER
-s SQLCMDCOLSEP
-t SQLCMDSTATTIMEOUT
-U SQLCMDUSER
-w SQLCMDCOLWIDTH
------------------------
T-SQL還原數(shù)據(jù)庫備份
restore database TionkDatabase from disk='E:\@工作\訊客\項目\訊客直銷\代碼\db20080521'
width move "源文件" to "目標文件位置"
------------------------
使用 T-SQL 執(zhí)行還原
RESTORE 命令有兩種形式顯示如下:
RESTORE DATABASE 還原完整的資料庫、檔案或檔案群組。
RESTORE LOG 還原交易記錄檔。
RESTORE 陳述式
執(zhí)行完整資料庫還原時 RESTORE 陳述式的語法如下:
RESTORE DATABASE database_name
[ FROM backup_device ]
[ WITH options ]
這個陳述式只要求資料庫的檔案名稱和備份所在的位置。
執(zhí)行檔案和檔案群組還原時陳述式的語法如下:
RESTORE DATABASE database_name
[ FILE = file_name ]
[ FILEGROUP = filegroup_name ]
[ FROM backup_device ]
[ WITH options ]
這個陳述式只要求資料庫名稱、檔案名稱或檔案群組名稱和備份所在的位置。
執(zhí)行交易記錄還原時陳述式的語法如下:
RESTORE LOG database_name
[ FROM backup_device ]
[ WITH options ]
就如同其他的命令,database_name 是還原將要執(zhí)行的資料庫名稱。backup_device 參數(shù)可以是邏輯備份裝置名稱或?qū)嶓w裝置的名稱。如果要指定一個實體裝置,必須限定它的裝置類型-也就是說,裝置名稱前面必須加上 DISK=、TAPE= 或 PIPE=。可以指定一個或多個裝置,中間以逗號隔開。
如果沒有提供 FORM 子句,還原將無法進行,而且仍然會執(zhí)行回復(fù)(除非執(zhí)行NORECOVERY 選項)。這項技術(shù)可以用來將資料庫設(shè)定為回復(fù)模式,而不還原其他附加資料。例如,可以執(zhí)行多個差異還原操作,然后執(zhí)行 RESTORE 陳述式,不需要 FORM 子句來將資料庫設(shè)定為回復(fù)模式,就能夠啟動回復(fù)過程。
選項
選項?
RESTRICTED_USER?
FILE = file_number?
PASSWORD = password?
MEDIANAME =media_name?
MEDIAPASSWORD = password?
MOVE 'logical_file_name' TO 'OS_file_name'
更改還原檔案的位置,例如:MOVE 'Northwind' TO 'D:\data\Northwind.mdf'。如果舊的磁碟無法使用,而需要還原到新的磁碟上時,可以使用這個選項。
NORECOVERY |RECOVERY | STANDBY = undo_file
NORECOVERY 指定在還原后,交易將無法退回或重新進行。如果將還原其他的備份(差異式備份或交易記錄檔備份),則需要用到這個選項。REVOVERY 為預(yù)設(shè)選項,它指定執(zhí)行回復(fù)操作,并退回每個沒有提交的變更。STANDBY 指定在還原需要還原情況下,建立還原(undo)檔案。
KEEP_REPLICATION 指定當(dāng)資料庫還原時復(fù)制設(shè)定要保存下來。
NOUNLOAD | UNLOAD NOUNLOAD 指定在還原完成后不卸載儲存媒體(例如,覆寫備份磁帶并彈出)。UNLOAD 為預(yù)設(shè)選項,指定在還原完成后卸載儲存媒體。
REPLACE 指出即使資料檔案已經(jīng)存在,SQL Server 仍將還原這些檔案。現(xiàn)存的檔案將被刪除和覆寫。如果沒有指定 REPLACE,那麼 SQL Server 將會核對 database_name 是否已經(jīng)存在。如果已經(jīng)存在,那麼將終止還原操作。這個安全特性幫助避免無意地將還原覆寫正在工作的資料庫。
RESTART 指定 SQL Server 在還原操作被中斷后重新啟動還原操作。
STATS [ = percentage ] 在還原操作完成了指定的百分率后顯示訊息。如果需要監(jiān)控操作的過程,這個選項將會很有用。
PARTIAL 指定執(zhí)行部份還原。
STOPAT = date_time
(log restore only)?
www.koogoogle.cn/whois
指定資料庫回復(fù)到 data_time 指定時刻的資料狀態(tài)(只對記錄檔還原有效)。
STOPATMARK = 'mark' 指定還原操作進行到標記處。
STOPBEFOREMARK = 'mark' 指定還原操作進行到標記之前。
?
通過System.Data.SqlClient命名空間只能執(zhí)行單條SQL,或多個內(nèi)容中間用;分開,不能執(zhí)行類似等命令,有沒有一種方法能類似查詢分析器一樣執(zhí)行一些批命令呢,答案是通過OSQL來執(zhí)行。
OSQL詳細用法:
http://technet.microsoft.com/zh-cn/library/ms162806.aspx
通地進程來調(diào)用:
?

?
?
?
?
?
?
?
?
10 ?
11 ?
12 ?
13 ?
14 ?
15 ?
16 ?
17 ?
18 ?
19 ?
20 ?
21 ?
22 ?
23 ?
24 ?
25 ?
26 ?
?
string comm = string.Format(" -U {5} -P {0} -S {1} -d {2} -b -e -i \"{3}\" -o \"{4}\"", pass,
?
?
?
Process.ExcuteOsqlCmd(comm, errorFile, FilePath);//直接執(zhí)行一個SQL文件,路徑為FilePath
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
