2011-10-12 158 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

相关问题