2013-05-15 80 views
0

我有一個使用bcp創建在cmdshell中執行的csv文件的存儲過程。當我在sql server 2012中運行存儲過程時,它會像我需要的那樣執行。但是當我從excel VBA運行它時,它只捕獲循環的第一個執行,然後停止。沒有錯誤,但我可以告訴它沒有完全運行。bcp輸出到master..XP_cmdshell存儲過程從excel執行時不工作

我發佈了下面的Vba和Sql存儲過程代碼。我正在努力找到有用的在線,所以我想我會問堆棧溢出!任何幫助將非常感激。謝謝!

Dim i As Long, folder As String, year1 As String, month1 As String, day1 As String,  data As String, hour1 As String, minute1 As String 
Dim cn As New ADODB.Connection 

'Open the connection 
strCon23 = "Driver={SQL Server};Server=*******" 
cn.CommandTimeout = 0 
cn.Open strCon23 

s = "EXEC SendNewRates" 
cn.Execute s 
cn.Close 






DECLARE @Date2 datetime 
SET @Date2=getdate() 
Declare @sql varchar(1250) 
DECLARE @hour varchar(25), @min varchar(25), @sec varchar(25) 
Declare @start VARCHAR(25), @Interval bigint, @num varchar(200), @max bigint,@end varchar(200) 
Set @Hour=datepart(hh,@Date2) 
Set @Min=datepart(Mi,@Date2) 
Set @Sec=datepart(ss,@Date2) 
Set @start=1 
Set @Interval=50000 
Set @[email protected] 
Set @num=1 
Set @max = (SELECT max(ROWNUM) FROM UPLOADTable) 

While @Start<@Max 

Begin 

set @SQL='bcp "Select Data From ******* Where [RowNum]>='[email protected]+' and [RowNum]<='[email protected] +' order by [RowNum]" '+'queryout C:\Test\Upload_NextGen_'[email protected]Hour+'_'[email protected]+'_'[email protected]+'_'[email protected]+'_.csv -c -T -t -S PRK- PR\EMULATION' 
EXEC master..XP_CMDSHELL @sql 
Set @[email protected]+1 
Set @Start=Convert(bigint,@Start)+convert(bigint,@Interval) 
Set @End=Convert(bigint,@end)+convert(bigint,@Interval) 

End 

回答

0

這可能與權限有關。

請問您的Windows用戶(如果使用Windows集成安全性與MS SQL)或SQL Server 用戶ID /密碼(如果使用MS SQL Server身份驗證)有權執行XP_CMDSHELL

當使用SMSS我認爲您正在使用更高級別的權限,如果您使用Windows集成安全性通過Exscel從ADO執行ADO。

我認爲你需要確保從Excel登錄在服務器上具有更高級別的權限。

使用xp_cmdShell/bcp需要比執行存儲過程更高級別的權限。

+0

我不認爲這是一個權限問題,因爲我的經理,遇到問題並創建過程的人是系統管理員。她今天不在辦公室,但我會盡快向你展示你的回覆。感謝您的回覆,我會告訴您我們的進展。 – user2383360

+0

是的,但她的Winodws帳戶仍然不會是SQL Server *上的SysAdmins角色的成員,除非明確添加* –