Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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 无法从for循环内部进行回音_Sql_Batch File_Cmd - Fatal编程技术网

Sql 无法从for循环内部进行回音

Sql 无法从for循环内部进行回音,sql,batch-file,cmd,Sql,Batch File,Cmd,我有下面的代码,它试图创建一个sql文件,其中包含所有插入,变量br中的所有不同值用逗号分隔。 我能够访问br in for循环中的所有值,但当我尝试回显整个语句时,它失败了 有什么帮助吗 @echo off set /p uid="USER ID = " set /p aname="APPL NAME = " set /p rname="ROLE NAME = " set /p cid="COMPANY ID = " set /p br="BR = " echo INSERT INTO US

我有下面的代码,它试图创建一个sql文件,其中包含所有插入,变量br中的所有不同值用逗号分隔。 我能够访问br in for循环中的所有值,但当我尝试回显整个语句时,它失败了

有什么帮助吗

@echo off

set /p uid="USER ID = "
set /p aname="APPL NAME = "
set /p rname="ROLE NAME = "
set /p cid="COMPANY ID = "
set /p br="BR = "
echo INSERT INTO USER_AUTH_BRANCH (USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR) VALUES ('%uid%','%aname%','%rname%','%cid%',%%~a); > test1.sql
for %%a in ("%br:,=" "%") do (

echo INSERT INTO USER_AUTH_BRANCH (USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR) VALUES ('%uid%','%aname%','%rname%','%cid%',%%~a); > test2.sql

)

你必须避开括号:

@echo off

set /p uid="USER ID = "
set /p aname="APPL NAME = "
set /p rname="ROLE NAME = "
set /p cid="COMPANY ID = "
set /p br="BR = "
echo INSERT INTO USER_AUTH_BRANCH (USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR) VALUES ('%uid%','%aname%','%rname%','%cid%',%%~a); > test1.sql
for %%a in ("%br:,=" "%") do (

echo INSERT INTO USER_AUTH_BRANCH ^(USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR^) VALUES ^('%uid%','%aname%','%rname%','%cid%',%%~a^); > test2.sql

)
问题是:

for %%a in ("%br:,=" "%") do (

echo INSERT INTO USER_AUTH_BRANCH (USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR)

之后的
…BR
被解释为
DO()
块的结束括号。这就是为什么您必须转义它以明确它实际上是字符串的一部分。

您必须转义括号:

@echo off

set /p uid="USER ID = "
set /p aname="APPL NAME = "
set /p rname="ROLE NAME = "
set /p cid="COMPANY ID = "
set /p br="BR = "
echo INSERT INTO USER_AUTH_BRANCH (USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR) VALUES ('%uid%','%aname%','%rname%','%cid%',%%~a); > test1.sql
for %%a in ("%br:,=" "%") do (

echo INSERT INTO USER_AUTH_BRANCH ^(USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR^) VALUES ^('%uid%','%aname%','%rname%','%cid%',%%~a^); > test2.sql

)
问题是:

for %%a in ("%br:,=" "%") do (

echo INSERT INTO USER_AUTH_BRANCH (USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR)

之后的
…BR
被解释为
DO()
块的结束括号。这就是为什么您必须转义它,以明确它实际上是字符串的一部分。

实际上,循环外的回声在不转义括号的情况下工作正常,问题是当它到达
'%uid%'
@PSYDUCK时,我编辑了我的答案,以明确错误所在。实际上,循环外的echo工作正常,没有逃逸括号,问题出现在它到达
'%uid%'
@PSYDUCK时。我编辑了我的答案以明确错误所在。请尝试
for/F“tokens=*”%%a in(“%br:,=%”)do(echo插入到用户身份验证分支(用户ID,应用名称,角色名称,公司ID,br^)值(“%uid%”、“%aname%”、“%rname%”、“%cid%”、“%$a”^”>test2.sql)
您只需转义结束参数即可。try
for/F“tokens=*”“%$a in(“%br:,=%”)do(回显插入用户身份验证分支(用户ID、应用名称、角色名称、公司ID、br^)值(“%uid%”、“%aname%”、“%rname%”、“%cid%”、“%cid%”、“%”testsql^>2)
您只需退出关闭选项即可。