批量執行SQL指令碼

2021-08-08 20:26:21 字數 3028 閱讀 1754

1.先要 xp_cmdshell 這個東東給開啟,開啟方法如下:

sp_configure 'show advanced options'

,1reconfigure

gosp_configure 'xp_cmdshell'

,1reconfigure

go

測試就這樣exec master.dbo.xp_cmdshell 'dir d:\'

2.我們做乙個分隔函式,如下:

alter

function [dbo].[f_split]

( @sourcesql

varchar(max),--字串

@strseprate

varchar(10)--分隔符

)returns

varchar(1000)

asbegin

declare

@iint

set@sourcesql=rtrim(ltrim(@sourcesql))

set@i=charindex(@strseprate,@sourcesql)

while

@i>=1

begin

set@sourcesql=substring(@sourcesql,@i+1,len(@sourcesql)-@i)

set@i=charindex(@strseprate,@sourcesql)

endreturn

@sourcesql

end

測試 :

sourcesql='2017-09-28    123.sql'

strseprate =' ' 是空格不是空

返回:123.sql

3.create proc 來執行操作

alter

procedure [dbo].[usp_batchimport]

( @returncode int=0

output, --返回錯誤數

@returnsucceed int=0

output, --成功執行檔案數量

@servername varchar(1000), --伺服器名稱

@database

varchar(500), --資料庫名稱

@uid varchar(50), --使用者名稱

@pwd varchar(50), --密碼

@filepath varchar(5000) --檔案路徑

)asbegin

declare @strsql varchar(2000)

set @strsql=' dir '+@filepath+'\*.sql'

--把讀到的檔名導到臨時表中

create

table #tmptb(filedes varchar(5000))

insert

into #tmptb

exec master.dbo.xp_cmdshell @strsql

--有木有錯誤

if(@@error<>0)

begin

set @returncode=1

return @returncode

end--把分隔後的檔名放在另外乙個表中,帶有.sql的檔案

select dbo.f_split(filedes,' ') as filedes

into #tmepuse from #tmptb where filedes like

'%.sql'

declare @strfilename varchar(2000)

declare @reexe int

--宣告乙個游標同時從#tmepuse中給游標賦值

declare fetfilename cursor

forselect filedes from #tmepuse

open fetfilename fetch

next

from fetfilename into @strfilename

while @@fetch_status=0

begin

--此句比較關鍵

set @strsql='osql -s '+@servername

+' -u '+@uid +' -p '+@pwd +' -d '+@database +' -i '

+@filepath +'\'+ @strfilename

exec @reexe=master.dbo.xp_cmdshell @strsql

if @reexe=0

set @returnsucceed=@returnsucceed+1

else

begin

select @strfilename

set @returncode=@returncode+1

endfetch next from fetfilename into @strfilename

endclose fetfilename

deallocate fetfilename

end

測試:

declare @returncode int 

declare @returnsucceed int

set @returncode=0

set @returnsucceed=0

--這是我自己的測試環境

exec [usp_batchimport] @returncode output,@returnsucceed output,'win7-1706042132','temp','sa','123456','d:\sql'

print @returncode

print @returnsucceed

oracle使用bat指令碼批量執行sql檔案

1首先建立乙個字尾為.bat的檔案,內容如下 c sqlplusdb user name db pass word 172.0.0.1 1521 dbname d temp update 20140923.sql exit 語法分析 c sqlplus所在路徑 sqlplus 使用者名稱 密碼 db...

批量執行指令碼

1 執行指令碼 coding utf 8 xiaoluo usr bin python import paramiko import time,os,sys import threading status status dic def ssh2 ip,port,username,passwd,cmd...

批量Ping執行Bash指令碼

bin bash ping batch script 連線超時時間 tmout 3 最大執行緒數 max thread 4000 保留記憶體大小 min mem 400 預設ip配置,可通過 r ip ip指定,格式 ping batch.sh r 192.168.1.1 192.168.2.254...