String 为什么我的脚本似乎会随机截断字符串?

String 为什么我的脚本似乎会随机截断字符串?,string,vbscript,hex,adodb,String,Vbscript,Hex,Adodb,下面的脚本基本上获取一个源表和一个目标表,并复制所有记录。它工作得相当好,但我经常遇到的一个问题是它似乎截断了一些字符串。以下是一个错误输出: 错误号:-2147217900说明:[Microsoft][ODBC SQL Server 驱动程序][SQL Server]字符串后未关闭的引号 '字符串段^urn:uuid:e9 e91fe151-5w4c-12e1-bac5-25b3a0' 在TableName值中插入('23189','23189','','1^^^','','12/5/2013

下面的脚本基本上获取一个源表和一个目标表,并复制所有记录。它工作得相当好,但我经常遇到的一个问题是它似乎截断了一些字符串。以下是一个错误输出:

错误号:-2147217900说明:[Microsoft][ODBC SQL Server 驱动程序][SQL Server]字符串后未关闭的引号 '字符串段^urn:uuid:e9 e91fe151-5w4c-12e1-bac5-25b3a0'

在TableName值中插入('23189','23189','','1^^^','','12/5/2013 3:37:2 PM','fieldvalue','','somethinghere','somethinghere','12/5/2013 9:37:22 AM'、'123456'、'1234568798'、'STRINGSEGMENT^urn:uuid: e91fe151-5w4c-12e1-bac5-25b3a0

查询长度为584个字符

如果查看源数据,被截断的字符串如下所示:

STRINGSEGMENT^urn:uuid:e91fe151-5w4c-12e1-bac5-25b3a0004b00^STRINGSEGMENT

因此,它在第53个字符(突出显示)后将其截断。
tSQL
的整个长度只有584个字符

为什么会这样

WScript.Echo“设置变量…”
Dim S连接、T连接、结果集、r
Dim sDSN、sUserName、sPassWord
Dim tDSN、tUserName、tPassWord
模糊值
sDSN=“mydsn”
sUsername=“我的用户名”
sPassword=“我的密码”
tDSN=“本地”
tUsername=“myusername”
tPassword=“我的密码”
sTable=“sourceTable”
tTable=“targetTable”
sSQL=“”见下文
sDSN=“DSN=”&sDSN&“UID=”&sUsername&“PWD=”&sPassword&“;”
tSQL=“从“&tTable&”订单ID描述中选择前1个ID”
tDSN=“DSN=”&tDSN&“UID=”&sUsername&“PWD=”&sPassword&“;”
Set sConnect=CreateObject(“ADODB.Connection”)
Echo“正在打开与源的连接…”
连接。打开sDSN
设置tConnect=CreateObject(“ADODB.Connection”)
Echo“正在打开与目标的连接…”
t连接。打开tDSN
Echo“正在查找当前记录…”
Set r=t连接.执行(tSQL)
出错时继续下一步
r、 先走
如果r.eof,则currentRecord=1
呃,明白了
不做就做
currentRecord=r(“ID”)+1
r、 下一步
环
r、 接近
sSQL=“Select*FROM”&sTable&“WHERE ID>=”¤tRecord
Echo“在记录处开始阴影”¤tRecord&“…”
Set resultSet=sConnect.Execute(sSQL)
resultSet.MoveFirst
不在resultSet.eof时执行
出错时继续下一步
tSQL=“插入到”&tTable&“值(”
对于resultSet.fields.Count-1,i=0
如果不是IsNull(resultSet(i)),则
值=替换(结果集(i),“,”)
“在这附近的某个地方
其他的
value=“”
如果结束
tSQL=tSQL&value
如果i
我不知道为什么会发生这种情况,但这是我的解决方法。我不会接受这一答案,只是想记录下来

Function allowed(n)
    allowed = true
    if n = 13 Then allowed = false
    if n = 14 Then allowed = false
End Function


Function sanitize(v,i) 'v=value i=index
    mystr = ""
    if allowed(i) Then
        if Not IsNull(v) Then
            mystr = replace(v,"'","")
        End If
    end if
    sanitize = mystr
End Function

基本上,我只是手动排除有问题的列。请注意,我识别了第二个列。真正奇怪的是,第12列和第13列在源数据库中有相同的数据,但第12列复制得很好。

中是
00
…-25b3a0
00
4b00^STRINGSEGMENT
。我认为是
0x的字节00
value被认为是字符串终止符…(我不知道
STRINGSEGMENT
的含义和它的来源)…关于如何避免这个问题有什么想法吗?STRINGSEGMENT也是我用来替换实际的私有文本的文本。:)我认为它在这个问题上没有任何相关性。所有这些都相关吗?为什么它会将其视为字符串以外的任何内容?通过
tSQL=tSQL&value
或至少在
t连接之前添加
Wscript.Echo tSQL
以查看脚本发送的值是否正确。。。(还是读错了?)