VBScript SQL选择查询澄清和变量替换

时间:2013-01-20 09:56:51

标签: vbscript ado

我已多次阅读此条目(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.维护变量的规则是什么     他们必须从@符号开始     有没有保留的话     如果必须以@符号开头,则下一个字符必须是字母

1 个答案:

答案 0 :(得分:0)

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

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

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

通过连接从部件(SQL语句,.Run或.Exec,...的命令行)构建复杂字符串非常麻烦。最重要的缺点是你不能(证明)读取所有那些“和&”的字符串。

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

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

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

  1. 编写一个带有模板字符串和替换字典的函数,将Regexp.Replace()应用于字符串
  2. 使用.NET的System.Text.StringBuilder及其.AppendFormat以类似样式的sprintf进行切片