如何使用管道作为批处理脚本中的SQL查询的一部分

时间:2013-10-09 11:08:45

标签: sql batch-file

我有一个表temp(text varchar2(500))。想要通过批处理脚本在文本列中插入此特定类型的数据:'inserta('li_count_312'||li_count);'

在我的批处理脚本中,我尝试了如下

SET "p1='inserta(^|^| " 
SET "p2=%var%_%insertat% " 
SET "p3=%p1%''^|^|%p2%^|^| ' ' " 
SET "p4=^|^|%var% "
SET "p5=%p3%%p4% "
SET "p6=%p5%); ' " 
SET TL=%p6%

echo. %TL%

echo INSERT INTO temp VALUES(%TL%); >> temp1.sql`

但在执行

C:\Windows\system32>echo INSERT INTO temp VALUES('inserta(  || '' || li_count_312   || ' '   || li_count  ); ' );  1>>temp1.sql

INSERT INTO temp VALUES('inserta(

管道后面的所有部分都没有显示。我想要这个数据

 'inserta('li_count_312'||li_count);'

在文本栏中。

先谢谢你的帮助..

2 个答案:

答案 0 :(得分:1)

请记住,|是批处理中的特殊符号(连接两个进程的管道符号。The same goes for a lot of special characters,所以你需要格外小心。据我所知,你得到了好吧,但是。

现在要在文本列中插入单引号,您需要转义它们:'''inserta('''会将'inserta('插入到列中:

第一个单引号将启动一个SQL字符串。接下来的两个意思是“单引号作为字符串的一部分”。

因此在纯SQL中,所需的代码如下所示:

 '''inserta(''li_count_312''||li_count);'''

要获得此功能,请复制任何现有的单引号,然后将整个内容用单引号括起来。

在您的脚本中,您需要编写

 SET "p1='''inserta(''^|^| " 
 ...

答案 1 :(得分:1)

您应该使用延迟扩展,因为您可以无需插入符号来定义字符串,并且扩展也是安全的。

setlocal EnableDelayedExpansion
SET "p1='inserta(|| " 
SET "p2=!var!_!insertat! " 
SET "p3=!p1!''||!p2!|| ' ' " 
SET "p4=||!var! "
SET "p5=!p3!!p4! "
SET "p6=!p5!); ' " 
SET "TL=!p6!"

echo. !TL!

echo INSERT INTO temp VALUES(!TL!); >> temp1.sql`

将其简化为

setlocal EnableDelayedExpansion
SET "TL=INSERT INTO temp VALUES('inserta('li_count_312'||li_count);'"