В приведенном ниже сценарии в основном используется таблица источников и таблица целей и копируются все записи. Он работает достаточно хорошо, но одна повторяющаяся проблема, с которой я сталкиваюсь, состоит в том, что она, кажется, усекает некоторые строки. Вот один из выходов ошибок:Почему мой скрипт, похоже, случайным образом усекает строки?
Номер ошибки: -2147217900 Описание: [Microsoft] [ODBC SQL Server Driver ] [SQL S ервере] Unclosed кавычки после строки символов «STRINGSEGMENT^урна: UUID : e9 e91fe151-5w4c-12e1-bac5-25b3a0 '.
INSERT INTO TableName VALUES ('23189', '23189', '', '', '1 ^^', '', '12/5/2013 3: 37: 2 2 PM', 'fieldvalue ',' ',' somethinghere ',' somethinghere ',' 12/5/2013 9:37:22 AM ',' 123456 ',' 1234568798 ',' STRINGSEGMENT^urn: uuid: e91fe151-5w4c-12e1- bac5-25b3a0
запросов является 584 символов
Если посмотреть на исходные данные, строка, которая усекается выглядит примерно так:
STRINGSEGMENT^урна: UUID: e91fe151-5w4c-12e1-bac5-25b3a 004b00^STRINGSEGMENT
Так что это отрезая его после 53-го символа (выделено). Вся длина tSQL
составляет всего 584 символов.
Почему это происходит?
WScript.Echo "Setting Vars..."
Dim sConnect, tConnect, resultSet, r
Dim sDSN, sUserName, sPassWord
Dim tDSN, tUserName, tPassWord
Dim value
sDSN = "mydsn"
sUsername = "myusername"
sPassword = "mypassword"
tDSN = "LOCAL"
tUsername = "myusername"
tPassword = "mypassword"
sTable = "sourceTable"
tTable = "targetTable"
sSQL = "" 'see below
sDSN = "DSN=" & sDSN & ";UID=" & sUsername & ";PWD=" & sPassword & ";"
tSQL = "Select TOP 1 ID FROM " & tTable & " ORDER BY ID Desc"
tDSN = "DSN=" & tDSN & ";UID=" & sUsername & ";PWD=" & sPassword & ";"
Set sConnect = CreateObject("ADODB.Connection")
WScript.Echo "Opening connection to source..."
sConnect.Open sDSN
Set tConnect = CreateObject("ADODB.Connection")
WScript.Echo "Opening connection to target..."
tConnect.Open tDSN
WScript.Echo "Finding Current Record..."
Set r = tConnect.Execute(tSQL)
On Error Resume Next
r.MoveFirst
if r.eof Then currentRecord = 1
Err.Clear
Do While Not r.eof
currentRecord = r("ID") + 1
r.MoveNext
Loop
r.Close
sSQL ="Select * FROM " & sTable & " WHERE ID >= " & currentRecord
WScript.Echo "Beginning shadow at record " & currentRecord & "..."
Set resultSet = sConnect.Execute(sSQL)
resultSet.MoveFirst
Do While Not resultSet.eof
On Error Resume Next
tSQL = "INSERT INTO " & tTable & " VALUES ('"
For i = 0 To resultSet.fields.Count - 1
if NOT IsNull(resultSet(i)) Then
value = replace(resultSet(i),"'","")
'somewhere around here
else
value = ""
End If
tSQL = tSQL & value
if i < resultSet.fields.Count - 1 Then
tSQL = tSQL & "','"
end if
Next
tSQL = tSQL & "')"
'when the error occurs, the line above doesn't seem to be processed but the line below obviously is...
tConnect.Execute(tSQL)
If (Err.Number <> 0) Then
WScript.Echo "Error Number: " & Err.Number & " Description: " & Err.Description
WScript.Echo tSQL
WScript.Echo "Query is " & Len(tSQL) & " characters long"
WScript.StdIn.ReadLine
Err.Clear
End If
tSQL = ""
resultSet.MoveNext
Loop
resultSet.Close
sConnect.Close
Set sConnect = Nothing
tConnect.Close
Set tConnect = Nothing
WScript.Quit(0)
Это '00' в' ...- 25b3a0' ** 00 ** '4b00^STRINGSEGMENT'. Я думаю, что байт с значением '0x00' считается строковым терминатором ... (я не знаю значение« STRINGSEGMENT »и откуда оно) ... – JosefZ
Любые идеи о том, как этого избежать? –
Также STRINGSEGMENT - это текст, который я использовал для замены фактического текста, который является приватным. :) Я не думаю, что это имеет отношение к этой проблеме. –