2013-01-09 51 views
0

我正在使用Javascript和Internet Explorer的ActiveXObjects連接到SQL數據庫。我可以從一張表中讀出結果,而不會出現問題。不幸的是,我無法弄清楚連接兩個在同一個數據庫中的表的語法。這就是我想要的:如何在Internet Explorer中使用javascript和ADO連接兩個SQL表

//create object 
var conn = new ActiveXObject("ADODB.Connection"); 

//store credentials 
var connectionstring = "Provider=sqloledb; Data Source={omitted}; Initial Catalog={omitted}; User ID={omitted};Password={omitted}"; 

//open the db connection with credentials 
conn.Open(connectionstring); 

//create a new record set 
var rs = new ActiveXObject("ADODB.Recordset"); 

//search the record set with SQL call 
rs.Open("SELECT * FROM [order] INNER JOIN OrderItems ON (order.Id = OrderItems.Id)", conn); 

如果我刪除「INNER JOIN」及其後的所有內容,我很好。請注意,因爲我認爲它是一個受保護的關鍵字,所以我必須在第一個表名(「order」)中加上括號......任何人都知道Javascript中這種事情的正確語法?

+3

*「任何人都知道這種事情在Javascript中的正確語法?」*這與JavaScript無關,它是ADO。如果它不工作,你應該得到一個異常,並指出*爲什麼*它不起作用。例如,'select *'表示「返回所有列」,並且這些表中至少有一個列名衝突(它們都有'Id'列),所以它可以像這樣簡單。嘗試給出表別名並僅請求實際需要的列,例如'select o.foo,oi.bar from [order] o inner join [OrderItems] oi on [order]。[Id] = [OrderItems]。[Id]'。 –

+0

謝謝TJ。你說得對,我以前得到一個錯誤。我忘了發佈...它說:關鍵字'訂單'附近的語法不正確。現在,我試着這樣: ** rs.Open(「SELECT o.Id FROM [order] o INNER JOIN [OrderItems] oi ON [order]。[Id] = [OrderItems]。[Id]」,conn ); ** 並得到以下內容: 無法綁定多部分標識符「order.Id」。 – Fred

回答

0

這可能是你正在尋找的SQL語法:

SELECT Orders.Id 
FROM [Orders] 
INNER JOIN OrderItems ON [Orders].Id = OrderItems.Id 

注意,()是不必要的。

如果你想使用別名,則必須在JOIN條款的其餘部分使用這些別名:

SELECT o.Id 
FROM [Orders] o 
INNER JOIN OrderItems oi ON o.Id = oi.Id 

一旦你的SQL確定下來,你應該能夠將其傳遞到Open方法:

var sql = 
    'SELECT Orders.Id ' + 
    'FROM [Orders] ' + 
    'INNER JOIN OrderItems ON [Orders].Id = OrderItems.Id'; 

rs.Open(sql, conn);