1

我已多次阅读此条目(http://stackoverflow.com/questions/8513185/vbscript-to-correctly-re-format-a-delimited-text-file),但仍然不理解 .Execute 部分。

WScript.Echo oTDb.Execute(Replace("SELECT * FROM [@T]", "@T", sTbl1)) _
.GetString( adClipString, , "|", vbCrLf, "" )

我遇到问题的部分是 [@T] 和“@T”。

我知道是“@T”正在读取架构文件中的文件名,并且 [@T] 必须使用“@T”作为替代。我找不到的是在哪里提到/谈到了这一点。

我还有一些额外的问题: 1. 如果文件名可以用变量替换,那么还有什么可以替代的?2. 变量的维护规则是什么 是否必须以@符号开头 是否有保留字 如果必须以@符号开头 下一个字符是否必须是字母

4

1 回答 1

0

因为我负责@Milton 的担忧/困惑:

VBScript 中没有变量插值/替换。当您用特殊符号标记替换时,其他语言(例如 Perl)会将变量甚至表达式结果拼接成字符串文字。VBScript 中没有这么有趣的字母。

SQL 方言允许参数化命令,其中要替换的部分用 ? 标记。和/或以 @ 等符号为前缀的名称。但是这里 ADO 从来没有看到 @T - VBScript 的 Replace() 函数在将结果字符串发送到 .Execute()之前插入了表名。

通过连接从部分(SQL 语句、.Run 或 .Exec 的命令行...)构建复杂的字符串很麻烦。最重要的缺点是您无法(证明)为所有那些“和&”读取字符串。

一个简单的解决方法是使用 Replace(),如

[sResult = ] Replace("SELECT * FROM [@T]", "@T", sTbl1)

我使用 @ 只是为了让占位符脱颖而出。当您需要在模板上进行更多替换时,您必须堆叠/嵌套 Replace() 调用,因此值得考虑其他策略:

  1. 编写一个函数,该函数采用模板字符串和替换字典将 Regexp.Replace() 应用于字符串
  2. 使用 .NET 的 System.Text.StringBuilder 及其 .AppendFormat 以类似 sprintf 的样式进行切片
于 2013-01-20T10:37:54.637 回答