Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用批处理命令将参数值从批处理文件传递到sql文件_Sql_Batch File_Parameters_Parameter Passing_Command Prompt - Fatal编程技术网

使用批处理命令将参数值从批处理文件传递到sql文件

使用批处理命令将参数值从批处理文件传递到sql文件,sql,batch-file,parameters,parameter-passing,command-prompt,Sql,Batch File,Parameters,Parameter Passing,Command Prompt,我有一个sql文件update\u qde.sql 其中包含以下代码 UPDATE profile_const set parameter_value = '04_2015' where profile_name = 'MIDAS_MTH_ALL_Panels' and parameter_name = 'PERIODS_TO'; commit; quit; 我有另一个批处理文件test.bat 我想使用batch命令将参数_值作为变量从批处理文件中传递 你能告诉我怎么做吗?使用SQLCMD

我有一个sql文件
update\u qde.sql
其中包含以下代码

UPDATE profile_const
set parameter_value = '04_2015'
where profile_name = 'MIDAS_MTH_ALL_Panels'
and parameter_name = 'PERIODS_TO';
commit;

quit;
我有另一个批处理文件
test.bat

我想使用batch命令将参数_值作为变量从批处理文件中传递


你能告诉我怎么做吗?

使用SQLCMD变量,所以将test.bat改为调用SQLCMD而不是ISQL

@echo off
sqlcmd -E -S myserver -i update_qde.sql -v PARM1=2015-01-01
将SQL更改为使用$()表示法

这很简单

用下面3行代码创建一个批处理文件。要创建批处理文件,请创建一个新的
.txt
文件,将以下代码保存在文件中,并将此文件的扩展名从
.txt
重命名为
.bat

在代码
value1
下面的第二行中,是保存需要更新的值的变量名。第三行代码是将此变量值传递给sql文件的地方

@echo off    
SET value1=04_2015    
sqlplus db_username/db_password@db_schema @sample.sql %value1%
下面给出了
sample.sql
的代码。下面代码中的
和&1
接受从批处理文件发送的参数,并将存储在变量
param1
中。稍后,您可以在
BEGIN
块中使用此
param1
变量,用于
更新
查询

SET SERVEROUTPUT ON
SET DEFINE ON
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 200
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET MARKUP HTML OFF SPOOL OFF
SET term off 
SET verify off
set echo off
SPOOL "C:\Test\Logfile.log" append;

var param1 VARCHAR2(20);
BEGIN
:param1 := '&&1';   
END;
/

SET DEFINE OFF

BEGIN

    UPDATE profile_const
    set parameter_value = :param1
    where profile_name = 'MIDAS_MTH_ALL_Panels'
    and parameter_name = 'PERIODS_TO';
    commit;     

END;
/

quit;
/

SPOOL OFF;
SET DEFINE ON
SET SERVEROUTPUT OFF

我验证了上面的代码,运行正常。

这可能会帮助您:谢谢。我会检查并让你知道
SET SERVEROUTPUT ON
SET DEFINE ON
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 200
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET MARKUP HTML OFF SPOOL OFF
SET term off 
SET verify off
set echo off
SPOOL "C:\Test\Logfile.log" append;

var param1 VARCHAR2(20);
BEGIN
:param1 := '&&1';   
END;
/

SET DEFINE OFF

BEGIN

    UPDATE profile_const
    set parameter_value = :param1
    where profile_name = 'MIDAS_MTH_ALL_Panels'
    and parameter_name = 'PERIODS_TO';
    commit;     

END;
/

quit;
/

SPOOL OFF;
SET DEFINE ON
SET SERVEROUTPUT OFF