У меня есть следующий код VBScript, который отлично работает на моем компьютере (Windows 7 SP1), но не запускается на другом компьютере (Windows XP SP3):Запрос, содержащий CTE, работающий против поставщика OLEDB, сбой на одном компьютере, но работающий на другом
Dim objConn 'adodb connection object
Dim objRS 'adodb recordset object
Dim strQuery
Const adOpenStatic = 3
Const adLockReadOnly = 1
Set objConn = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.Recordset")
objConn.Open "Provider=sqloledb;Data Source=" & strDBServer & ";Initial Catalog=BromsunInfo;Integrated Security=SSPI;"
strQuery = _
"WITH CMSRATES AS " & _
"(" & _
"SELECT h.EMPL_UNO, h.employee_code, r.rate 'Rate', r.eff_date 'Eff Date' " & _
"FROM " & strCMSDBServer & ".cmsopen.dbo.hbm_persnl h, " & strCMSDBServer & _
".cmsopen.dbo.tbm_persnl p, " & strCMSDBServer & ".CMSOPEN.dbo.TBM_RATE_FEE r " & _
"WHERE h.empl_uno = p.empl_uno " & _
"AND p.empl_uno = r.empl_uno " & _
"AND R.EFF_DATE = " & _
"(SELECT MAX(EFF_DATE) " & _
"FROM " & strCMSDBServer & ".cmsopen.dbo.TBM_RATE_FEE R2 " & _
"WHERE R2.RATE_LEVEL = '1' and member_type='1' AND R2.GROUP_TYPE = '4' AND R2.EMPL_UNO = P.EMPL_UNO) " & _
"AND r.rate_level = '1' " & _
"AND r.group_type = '4' " & _
"AND r.member_type='1' " & _
") " & _
"SELECT bu.UserID, cr.Rate, cr.EMPL_UNO " & _
"FROM " & strDBServer & ".BromsunInfo.dbo.BromsunUsers bu " & _
"INNER JOIN CMSRATES cr " & _
"ON cr.employee_code = bu.Initials " & _
"ORDER BY bu.UserDisplayName"
With objRS
.Open strQuery, objConn, adOpenStatic, adLockReadOnly
'Do stuff here
.Close
End With
objConn.Close()
ошибка я получаю, что происходит при вызове objRS.Open, является Incorrect syntax near the keyword 'WITH'
, что указывает на то, что ему не нравится мое использование КТР. Вот запрос вне сценария:
WITH CMSRATES AS
(
SELECT h.EMPL_UNO, h.employee_code, r.rate 'Rate', r.eff_date 'Eff Date'
FROM cmsopen.dbo.hbm_persnl h, cmsopen.dbo.tbm_persnl p, CMSOPEN.dbo.TBM_RATE_FEE r
WHERE h.empl_uno = p.empl_uno
AND p.empl_uno = r.empl_uno
AND R.EFF_DATE =
(SELECT MAX(EFF_DATE)
FROM cmsopen.dbo.TBM_RATE_FEE R2
WHERE R2.RATE_LEVEL = '1' and member_type='1' AND R2.GROUP_TYPE = '4' AND R2.EMPL_UNO = P.EMPL_UNO)
AND r.rate_level = '1'
AND r.group_type = '4'
AND r.member_type='1'
)
SELECT bu.UserID, cr.Rate, cr.EMPL_UNO
FROM dbo.BromsunUsers bu
INNER JOIN CMSRATES cr
ON cr.employee_code = bu.Initials
WHERE ISNULL(bu.BillingRate, -1)<>cr.Rate
ORDER BY bu.UserDisplayName
Я задаюсь вопросом, есть ли что-то другое с драйвером OLEDB на моей машине Windows 7 по сравнению с машиной XP. Я не могу понять, как важна версия драйвера, поскольку запрос в конечном итоге будет запущен на сервере базы данных.
Любая помощь будет высоко оценена.
Если у вас есть какая-то балансировка нагрузки на сервере? Возможно, это балансирует вас между двумя разными версиями SQL (что было бы странно странно, но кто знает)? – Joe
@Joe - Нет, нет балансировки нагрузки. –
Вы уверены, что подключаетесь к одному серверу? Если это так, то это должен быть драйвер - такая же версия драйвера? – Hogan