Author:David Euler
Date: 2004/09/28
Email:de_euler-david@yahoo.com.cn
有任何問題,請與我聯(lián)系:)
有時(shí)候我們需要多次運(yùn)行一個(gè)文件夾下所有的sql腳本(可能時(shí)txt或者sql等文本文件)來更新Schema,文件多的時(shí)候需要多次執(zhí)行,那么可以使用多條語句來執(zhí)行sql腳本。
--下面的查詢語句在SQL Query中運(yùn)行,將執(zhí)行d:\vss下面的指定sql腳本,這些腳本的后綴都是txt
exec master..xp_cmdshell ‘isql -U sa -P 123 -i d:\vss\MSSchema.txt ‘
exec master..xp_cmdshell ‘isql -U sa -P 123 -i d:\vss\MSSchema_030311.txt ‘
exec master..xp_cmdshell ‘isql -U sa -P 123 -i d:\vss\MSSchema_030416.txt‘
exec master..xp_cmdshell ‘isql -U sa -P 123 -i d:\vss\MSSchema_030417.txt‘
exec master..xp_cmdshell ‘isql -U sa -P 123 -i d:\vss\MSSchema_030513.txt‘
exec master..xp_cmdshell ‘isql -U sa -P 123 -i d:\vss\MSSchema_030613.txt‘
exec master..xp_cmdshell ‘isql -U sa -P 123 -i d:\vss\MSSchema_031010.txt‘
exec master..xp_cmdshell ‘isql -U sa -P 123 -i d:\vss\MSSchema_050810.txt‘
exec master..xp_cmdshell ‘isql -U sa -P 123 -i d:\vss\TaxInvoice.sql‘
當(dāng)然,我們完全可以不使用存儲(chǔ)過程,而只是在一個(gè)批處理文件updateschema.cmd中執(zhí)行這些命令,下面是updateschema.cmd的內(nèi)容:
;下面的命令將執(zhí)行d:\vss下面的指定sql腳本:
isql -U sa -P 123 -i d:\vss\MSSchema.txt
isql -U sa -P 123 -i d:\vss\MSSchema_030311.txt
isql -U sa -P 123 -i d:\vss\MSSchema_030416.txt
isql -U sa -P 123 -i d:\vss\MSSchema_030417.txt
isql -U sa -P 123 -i d:\vss\MSSchema_030513.txt
isql -U sa -P 123 -i d:\vss\MSSchema_030613.txt
isql -U sa -P 123 -i d:\vss\MSSchema_031010.txt
isql -U sa -P 123 -i d:\vss\MSSchema_050810.txt
注:
1.exec語句用來執(zhí)行存儲(chǔ)過程,xp_cmdshell是master數(shù)據(jù)庫中的一個(gè)擴(kuò)展存儲(chǔ)過程,可以用來執(zhí)行系統(tǒng)命令的字符串,
比如exec master..xp_cmdshell ‘dir *.exe‘查看當(dāng)前目錄下所有的exe文件。
2.isql是sql server的一個(gè)實(shí)用工具,可以理解程一個(gè)外部程序,如果sql使用的默認(rèn)安裝,可以在C:\Program Files\Microsoft SQL Server\80\Tools\Binn目錄中找到這個(gè)isql.exe文件,isql可以用來執(zhí)行Transact-SQL語句,存儲(chǔ)過程,以及腳本文件,
參數(shù)-U用來指定登陸服務(wù)器的用戶名,-P用來指定密碼,
參數(shù)-i用來指定讀取執(zhí)行的腳本文件,
參數(shù)-o用來指定保存輸出結(jié)果的文件名。
3.其他Oracle,DB2,MySQL,PostgreSQL等幾個(gè)常用數(shù)據(jù)庫中也有相應(yīng)的工具也可以實(shí)現(xiàn)類似的功能。