Vbscript 在多行之间断开字符串

Vbscript 在多行之间断开字符串,vbscript,Vbscript,我编写了一个连接到Oracle数据库的脚本,用于在特定表中选择多个条目 该声明如下所示: rs.open "SELECT PATH301 FROM NC301B WHERE EDIPROC like 'P30_' AND (LF301M > 0) AND (PATH301 NOT LIKE '%saptemp%') AND (PATH301 NOT LIKE '%SAPTEMP%') AND (PATH301 NOT LIKE '%usr%') AND (PATH301 NOT LIKE

我编写了一个连接到Oracle数据库的脚本,用于在特定表中选择多个条目

该声明如下所示:

rs.open "SELECT PATH301 FROM NC301B WHERE EDIPROC like 'P30_' AND (LF301M > 0) AND (PATH301 NOT LIKE '%saptemp%') AND (PATH301 NOT LIKE '%SAPTEMP%') AND (PATH301 NOT LIKE '%usr%') AND (PATH301 NOT LIKE '%Windows%');", cn, 3
qry = "SELECT PATH301 FROM NC301B " & _
      "WHERE EDIPROC like 'P30_' AND (LF301M > 0) " & _
      "AND (PATH301 NOT LIKE '%saptemp%') " & _
      "AND (PATH301 NOT LIKE '%SAPTEMP%') " & _
      "AND (PATH301 NOT LIKE '%usr%') " & _
      "AND (PATH301 NOT LIKE '%Windows%');"
rs.open qry, cn, 3
现在我想知道是否有可能将此语句拆分为多行。例如:

rs.open "SELECT PATH301 FROM NC301B WHERE EDIPROC like 'P30_' AND (LF301M > 0) AND (PATH301 NOT LIKE '%saptemp%') AND (PATH301 NOT LIKE '%SAPTEMP%') AND (PATH301 NOT LIKE '%usr%') AND (PATH301 NOT LIKE '%Windows%');", cn, 3
qry = "SELECT PATH301 FROM NC301B " & _
      "WHERE EDIPROC like 'P30_' AND (LF301M > 0) " & _
      "AND (PATH301 NOT LIKE '%saptemp%') " & _
      "AND (PATH301 NOT LIKE '%SAPTEMP%') " & _
      "AND (PATH301 NOT LIKE '%usr%') " & _
      "AND (PATH301 NOT LIKE '%Windows%');"
rs.open qry, cn, 3
rs.open“从NC301B中选择路径301
其中EDIPROC类似于“P30”
和(LF301M>0)
和(路径301与“%saptemp%”不同)
和(路径301与“%SAPTEMP%”不同)
和(路径301与“%usr%”不同)
和(路径301与“%Windows%”不同);“,cn,3
第一个
SELECT
语句太大了,一点也不好看。
我希望您能理解我的意思。

SQL语句是一个字符串,因此您可以将其拆分为多个字符串,并将它们合并。使用行连续运算符(
)包装语句。出于可读性原因,我将查询放在一个变量中,如下所示:

rs.open "SELECT PATH301 FROM NC301B WHERE EDIPROC like 'P30_' AND (LF301M > 0) AND (PATH301 NOT LIKE '%saptemp%') AND (PATH301 NOT LIKE '%SAPTEMP%') AND (PATH301 NOT LIKE '%usr%') AND (PATH301 NOT LIKE '%Windows%');", cn, 3
qry = "SELECT PATH301 FROM NC301B " & _
      "WHERE EDIPROC like 'P30_' AND (LF301M > 0) " & _
      "AND (PATH301 NOT LIKE '%saptemp%') " & _
      "AND (PATH301 NOT LIKE '%SAPTEMP%') " & _
      "AND (PATH301 NOT LIKE '%usr%') " & _
      "AND (PATH301 NOT LIKE '%Windows%');"
rs.open qry, cn, 3
VBScript中不支持多行字符串。

使用行延续(
\uu
)和连接或联接:

s = "a b c"
WScript.Echo s
s =   "a " _
    & "b " _
    & "c"
WScript.Echo s
s = Join(Array( _
          "a" _
        , "b" _
        , "c" _
))
WScript.Echo s
输出:

cscript 37564704.vbs
a b c
a b c
a b c

应该做你想做的,假设你只是想让它看起来更好;这根本不会影响任何功能

rs.open "SELECT PATH301 FROM NC301B " & _
"WHERE EDIPROC like 'P30_' " & _
"AND (LF301M > 0) " & _
"AND (PATH301 NOT LIKE '%saptemp%') " & _
"AND (PATH301 NOT LIKE '%SAPTEMP%') " & _ 
"AND (PATH301 NOT LIKE '%usr%')  " & _
"AND (PATH301 NOT LIKE '%Windows%');", cn, 3

好吧,不管怎样,我将发布一个答案,我从来都不是这个游戏的粉丝

使用行连续字符 正如我所说,听起来您希望使SQL命令在代码中更具可读性。通常的方法是使用

dimsql
sql=“选择路径301”和_
“来自NC301B”和_
“其中EDIPROC类似于‘P30’_
“和(LF301M>0)”&_
“和(路径301与“%saptemp%”不同)&”_
“和(路径301与“%SAPTEMP%”不同)&”_
“和(路径301与“%usr%”不同)&”_
“和(路径301与“%Windows%”不同)
请记住,如果我们不处理字符串,这是不同的,例如,在两行上继续执行
if
语句,看起来像这样

如果结果=(_
条件1_
和条件2_
那么
因为我们不能跨行断开字符串,所以我们通过终止字符串继续该行,然后将该字符串连接到下一个字符串
&
来作弊。这也意味着这将起作用

dimsql
sql=“选择路径301”_
&“来自NC301B”_
&“其中EDIPROC类似于‘P30’_
&“和(LF301M>0)”_
&“和(路径301与“%saptemp%”不同)_
&“和(路径301与“%SAPTEMP%”不同)_
&“和(路径301与“%usr%”不同)_
&“和(路径301与“%Windows%”不同)
这一切都取决于个人偏好,而且这两种方式都没有任何性能优势

就我个人而言,虽然我发现这种方法比它的价值更麻烦,尤其是在SQL字符串方面

使用字符串连接 假设你想在没有任何条件的情况下进行测试

和(路径301与“%SAPTEMP%”不同)
尝试注释掉该行将生成一个

Microsoft VBScript编译错误:
语法错误

这是一个例子

dimsql
sql=“选择路径301”和_
“来自NC301B”和_
“其中EDIPROC类似于‘P30’_
“和(LF301M>0)”&_
“和(路径301与“%saptemp%”不同)&”_
“,(路径301与“%SAPTEMP%”不同)&”_
“和(路径301与“%usr%”不同)&”_
“和(路径301与“%Windows%”不同)
这使得它非常不灵活,这就是为什么我喜欢用它来建立一个字符串,像这样

Dim sql:sql=“”
sql=sql&“选择路径301”
sql=sql&“来自NC301B”
sql=sql&“其中EDIPROC类似于‘P30’
sql=sql&“和(LF301M>0)”
sql=sql&(路径301与“%saptemp%”不同)
sql=sql&(路径301与“%SAPTEMP%”不同)
sql=sql&(路径301与“%usr%”不同)
sql=sql&(路径301与“%Windows%”不同)
尽管需要做一些额外的工作,但它要灵活得多,允许您通过注释行来测试SQL字符串,而不会影响整个SQL字符串,就像这样

Dim sql:sql=“”
sql=sql&“选择路径301”
sql=sql&“来自NC301B”
sql=sql&“其中EDIPROC类似于‘P30’
sql=sql&“和(LF301M>0)”
sql=sql&(路径301与“%saptemp%”不同)
“sql=sql&”(路径301与“%SAPTEMP%”不同)
sql=sql&(路径301与“%usr%”不同)
sql=sql&(路径301与“%Windows%”不同)
我喜欢做的另一件小事是在每一行后面加上
&vbNewLine
,如下所示

Dim sql:sql=“”
sql=sql&“选择路径301”&vbNewLine
sql=sql&“来自NC301B”&vbNewLine
sql=sql&“其中EDIPROC类似于‘P30’”&vbNewLine
sql=sql&“AND(LF301M>0)”&vbNewLine
sql=sql&“和(路径301与“%saptemp%”不同)”&vbNewLine
sql=sql&“和(路径301与“%SAPTEMP%”不同)”&vbNewLine
sql=sql&“AND(路径301与“%usr%”不同)”&vbNewLine
sql=sql&(路径301与“%Windows%”不同)
这样,当输出字符串时(使用经典ASP、WScript等),它的格式正确,当显示在HTML页面时(如果使用经典ASP),您可以轻松使用

sql=Replace(sql,vbNewLine,

要正确格式化,在尝试调试动态SQL问题时非常有用。

如果您的意思是使命令更易于阅读,那么您需要的是该问题的可能副本,而不是该问题的副本。这里的问题有两个方面,因为OP想要包装一个字符串,而VBScript不支持多行字符串。@AnsgarWiechers它以前已经被回答过了,你知道的,我只是还没有找到正确的答案。下面是另一个为什么不只滚动一个简单的字符串生成器类,每行都会调用sb.Append(“foo”)。这比频繁调用字符串构造函数要快得多。这样,您仍然可以注释掉单独的行。示例代码:@DeveloperWebs您当然可以,但我没有看到在构建字符串(尤其是用于SQL语句的字符串)时出现大量性能问题。也许如果我正在输出HTML,那么我只需要使用
Response.Write()
。和10个concat