通过批处理文件将 varchar 参数传递给 sql 文件

Posted

技术标签:

【中文标题】通过批处理文件将 varchar 参数传递给 sql 文件【英文标题】:Pass varchar param to sql file via Batch file 【发布时间】:2011-08-16 09:45:26 【问题描述】:

我有一个批处理文件,它运行多个 sql 文件并将参数传递给它们。 输入参数存储在一个txt文件中,由批处理文件读取。

我正在尝试将 varchar 值传递给 SQL 的 IN 子句。

例如

在我的输入文件我这个条目

var1="'tommy','jim'"

在批处理文件中

<code to read file , assuming %1 has the var1 value>
set param=%~1

sqlplus %DBCONN% @%programFolder%\test.sql %param%

test.sql(名称为 varchar2)

select * from table where name in (&1);

这给出错误,说无效号码 当它试图运行时

select * from table where name in (tommy);


如果我在 sql stmt 之前回显,它会显示 'tommy','jim' 但在 sql 中,它删除了 jim 和单引号 ...

请帮忙!


现在我将输入文件中的条目编辑为 var1="'''tommy''','''jim'''"

select * from table where name in ('tommy');

但它会截断第二个值

任何线索如何包含逗号??

【问题讨论】:

你能分享更多关于你如何解决这个问题的细节吗?我有以下代码 //read input file- ('pdf','csv','jpeg','png') set /P ALLOWED_TYPES= 【参考方案1】:

终于找到方法了

输入文件 - var1=('tommy','jim')

从 sql 文件中删除大括号 select * from table where name in &amp;1;

这行得通,我不知道为什么带逗号是个问题,应该有某种方法来传递逗号! 如果有人知道,请告诉我。

谢谢

【讨论】:

【参考方案2】:

波浪号 (~) 从变量中去除引号。

尝试在输入文件中使用var1='tommy','jim',在批处理脚本中使用set param=%1

【讨论】:

如果我删除波浪号,参数本身会被批量分离。 echo %var1% 之前 sql 只显示 'tommy'

以上是关于通过批处理文件将 varchar 参数传递给 sql 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将额外的额外参数传递给批处理文件?

如何将参数传递给批处理文件[重复]

将参数传递给参数

将参数传递给windows计划任务

如何通过控制器将参数传递给策略中使用的授权处理程序

如何使用 ShellExecute 从 VBScript 将参数传递给批处理文件 [重复]