2011-10-17 45 views
0

我经常有一项任务有点像这样:将大量用户插入具有类似属性的users表中。并不总是这么简单,但总的来说,字符串列表 - >相应的sql语句列表。使用脚本工具自动创建sql语句

我通常的解决办法是用这个用户名在Excel列表中使用公式生成插入语句

=concatenate("insert into users values(username .......'",A1,"'..... 

,然后我向下填充公式以获取所有插入行的负载。

这种方法很有效,但有时候这个陈述很长,有时包括几个不同的步骤,并且把它们全部填入excel公式中,让所有包装报价变得正确是一件痛苦的事情。

我想知道是否有更好的方法。我真正想要的是能够有一个模板文件模板TXT:

insert into users 
    ([username], 
      [company] ... 



     ) 
    values('<template tag1>... 

,然后使用一些神奇的命令行工具,简单地能够像

command_line> make_big_file_using_template template.txt /values [username1 username2] 
/output: bigfile.txt 

输入一些东西,这给我是一个很大的文件,每个用户名值重复使用模板,标签由用户名替换。

那么这样的命令是否存在,或者我对命令行工具的期望值是否过高?任何免费的Windows工具都可以。我可以在不太多的时间内完成一个c#程序来完成这个任务,但我觉得现在必须有一个易于使用的工具。

+0

'template.txt'来自哪里fr OM?数据库?你使用的是什么RDBMS?许多都有可以读取表单文本文件的“INSERT”命令。 –

+0

我写过了。问题与数据库类型无关,事实上,这是我有时用于生成其他(非sql)类型代码的问题。 –

+0

为什么要用这种方式生成SQL,而不是只有一个存储过程作用于您导入的数据? – Sorpigal

回答

1

这是使用Powershell脚本的微不足道。 PS允许字符串变量内联,所以你可以这样做:

$Tag1 = 'blah' 
$Tag2 = 'foo' 

$SQLHS = @" 
INSERT INTO users 
([username], 
[company],...) 
VALUES 
('$tag1', '$tag2'...) 
"@ 

set-content 'C:\Mynewfile.txt' -value $SQLHS 

@"...."@here-string,这使得它非常容易写可读的代码,而转义引号和这种。

上述内容可以非常容易地修改为接受各种标签的参数,另一个输出文件接受参数,或运行位于另一个.txt或.csv文件中的一组值作为输入。

编辑:

修改它以接受参数,你可以在上面添加一个param()块:

param($outfile, $tab1, $tab2, $tab3)

然后在你的脚本中使用这些$变量

set-content "$outfile" -value $SQLHS

+0

看起来只是我想要的东西 - 但我如何修改它以获取值列表并将它们全部输出到大文件中? –

+0

@JonnyCundall - 查看编辑 – JNK