Sql 无法从for循环内部进行回音
我有下面的代码,它试图创建一个sql文件,其中包含所有插入,变量br中的所有不同值用逗号分隔。 我能够访问br in 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
@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)
您只需转义结束参数即可。tryfor/F“tokens=*”“%$a in(“%br:,=%”)do(回显插入用户身份验证分支(用户ID、应用名称、角色名称、公司ID、br^)值(“%uid%”、“%aname%”、“%rname%”、“%cid%”、“%cid%”、“%”testsql^>2)
您只需退出关闭选项即可。