2013-01-20 99 views
1

我已閱讀本條目(http://stackoverflow.com/questions/8513185/vbscript-to-correctly-re-format-a-delimited-text-file)很多次,仍然不瞭解.Execute部分。VBScript的SQL SELECT查詢澄清和變量替換

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

我遇到的問題是[@T]和「@T」。

我知道它是「@T」即讀的文件名中的模式文件,並與[@T]必須使用「@T」作爲替代品。我無法找到的是這被提及/談到的地方。

一些另外的問題,我有是: 1.如果文件名可以用一個變量來代替,然後還能有什麼? 2.什麼是保持 難道他們不得不開始以@符號 變量的規則是否有任何保留字 如果他們開始用@符號,它的下一個字符必須是字母

回答

0

由於我負責@米爾頓的擔心/困惑:

有在VBScript不變量插值/替換。其他語言 - 例如Perl - 在用特殊符號標記替換項時,會將變量甚至表達式結果拼接成字符串文字。 VBScript中沒有這種有趣的字母。

SQL方言允許參數化命令,其中部分被替換標記由?和/或以@符號爲前綴的名稱。但是ADO從來沒有看到@T-VBScript的Replace()函數在之前插入了表名,結果字符串被髮送到.Execute()。

通過串聯構建從零部件複雜的字符串(SQL語句,COMMANDLINES爲.RUN或.Exec,...)很麻煩。最重要的缺點是,你不能(證明)讀取的字符串了所有這些「和&。

一個簡單的解決方法是使用REPLACE(),如

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

我用@只是爲了讓佔位立場,你將不得不堆/窩替換()的時候,你需要的模板多個取代電話,其他的策略值得考慮:

  1. 寫一個函數,它接受一個模板字符串和應用正則表達式的替換字典p.Replace()使用.NET的System.Text.StringBuilder及其.AppendFormat字符串
  2. 做切片中的sprintf般的風格
+0

Ekkehard。感謝您的回答 - 我在閱讀後覺得自己像個新手。我只能說,我沒有看到樹的木材:) – Milton

+0

@Milton - 不客氣。不需要感覺不好 - Replace()被隱藏在很多其他樹/代碼中。你指出這一點。 –