我有以下在我的計算機(Windows 7 SP1)上運行良好但無法在另一臺計算機上運行的VBScript代碼(Windows XP SP3):查詢包含針對OLEDB提供程序運行的CTE在一臺計算機上失敗,但在另一臺計算機上運行的查詢
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'
,這表明它不喜歡我使用CTE的。下面是在腳本之外查詢:
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
我不知道是否有與XP機相比我的Windows 7計算機上,使用OLEDB驅動程序的不同的東西。但是,我無法理解驅動程序的版本是如何重要的,因爲查詢最終將在數據庫服務器上運行。
任何幫助將不勝感激。
有沒有機會在服務器上進行某種負載均衡?也許它會在兩個不同版本的SQL之間平衡你(這將會非常奇怪,但是誰知道)? – Joe
@Joe - 不,沒有負載平衡。 –
你確定你連接到同一臺服務器嗎?如果是這樣,那麼它必須是驅動程序 - 驅動程序的相同版本? – Hogan