2011-10-12 156 views
1

我發現我無法在我的託管sql服務器數據庫上授予BULKADMIN或SYSADMIN角色,並嘗試通過創建包含插入語句的.sql文件來繞過批量插入操作。 insert語句是使用xls宏創建的,所以我現在正在做一些手動bodyshopping工作。所以讓我在這裏畫出問題。DOS腳本將另一個文件讀入另一個文件

我有以下內容的文本文件 -

10/05/2011 01:21 PM 1-16332-1008261.psa 
10/05/2011 01:21 PM 1-16332-1011698.psa 
10/05/2011 01:21 PM 1-16332-1023151.psa 
10/05/2011 01:21 PM 1-16332-1035695.psa 
10/07/2011 03:36 PM 1-16332-1023193.psa 
10/07/2011 03:36 PM 1-16332-1035694.psa 
6 File(s) 8,933,754 
2 Dir(s) 1,675,268,096 free 

我想在我的最終輸出文件來實現是這樣的 -

insert into xyz.abcd values('10/05/2011', '1-16332-1008261.psa'); 
insert into xyz.abcd values('10/05/2011', '1-16332-1011698.psa'); 
insert into xyz.abcd values('10/05/2011', '1-16332-1023151.psa'); 
insert into xyz.abcd values('10/05/2011', '1-16332-1035695.psa'); 
insert into xyz.abcd values('10/07/2011', '1-16332-1023193.psa'); 
insert into xyz.abcd values('10/07/2011', '1-16332-1035694.psa'); 
go 

上應注意的是,最後兩行從我的輸入文本文件將在我的最終輸出sql文件dinged。它的xls宏自動化我現在通過dos腳本來手動執行,其中'insert into xyz.abcd values'被認爲是一個常量字符串,該字符串在讀取文件的實際日期和文件名之前寫入到每個新行。 我會將我的最終輸出文件命名爲.sql,並從我的計算機遠程執行它。 有人可以幫助我,如果這可以在DOS編程中實現或不可以。

我試圖在另一篇文章中提出類似的問題,我試圖刪除,但無法這樣做。猜猜我沒有正確解釋另一個。

我知道我可以通過echo命令將字符串作爲文字重定向到文件,但挑戰是如何從一個文件中讀取一部分行並將它們放入新文件中。

謝謝!

+0

您可以用閱讀[SO DOS批處理文件:如何讀取文件]啓動(http://stackoverflow.com/questions/206114/dos-batch-files如何讀取文件/ 4531090#4531090)和'for /?',特別是令牌部分 – jeb

回答

2

請將以下代碼放入記事本中,並將其保存爲CMD批處理文件(例如Convert2SQLfile.cmd)。然後從命令行與3個參數運行它,而:

  • 第一參數包含於從該數據將被讀
  • 第二參數源文件路徑包含哪些數據將被保存目的地的文件路徑
  • 第三個參數包含應該存儲在SQL命令中的表名,而不是您在請求中使用的「xyz.abcd」

希望這會有所幫助。

問候,
Standa

 
    @echo off 
    SetLocal 

    SET App.SourceFile=%1 
    SET App.DestinationFile=%2 
    SET App.Table=%3 


    FOR /f "usebackq tokens=1,4" %%i IN (`type %%App.SourceFile%%`) DO (
     IF #%%j# NEQ ## (
      IF #%%j# NEQ #free# (
       ECHO insert into %App.Table% values ^('%%i', '%%j'^); >> %App.DestinationFile% 
      ) 
     ) 
    ) 

    ECHO go >> %App.DestinationFile% 
+0

Evianton,謝謝你的聲音聽起來像是輕描淡寫!這像一個魅力。此線程可以幫助其他人不具有BULKADMIN訪問權限,但希望將SQL文件上載到遠程服務器上託管的SQL Server數據庫。 – user982201

+0

@ user982201'IF#%% j#NEQ#free#'的目的是什麼?我明白了,它是原始文件的一部分,請參閱問題。 – Roland

相關問題