2011-04-13 30 views
1

我有兩個問題來訪問SQL Server數據庫時設置架構和處理屬性名稱的情況下:如何使用JRuby,ActiveRecord的,和JDBC訪問MS的SQLserver

  • 如何設置模式

我需要訪問的表格在'general'模式下,而不是'dbo'。除非我用set_table_name,我會像「無效的對象」錯誤

class Role < ActiveRecord::Base 
    set_table_name "general.Role" 
end 

是否有另一種方式來設置模式在JDBC URL的屬性。我檢查了MS jdbc驅動程序和jtds驅動程序,但無法找到這樣的屬性。

  • 如何處理屬性名

當訪問DB2,所有的屬性名稱是小寫。但對於mssql,屬性名稱與數據庫中定義的大小相同,例如「RoleID」。我想知道是否只有db2驅動程序強制屬性名稱爲小寫。

回答

1

在T-SQL中,完全限定對象名稱是<database>.<owner>.<objectname>。請注意,你問的是所有者而不是架構(我猜你是從甲骨文的土地來的?)。

鑑於它是對象所有者,而不是「連接到的模式」(如在Oracle範例中),我認爲「連接到所有者」是不合理的,這實際上就是您「問。

使用您所描述的set_table_name方法對此案完全有效。即使您的Role表由dbo擁有,您仍然必須使用set_table_name,因爲默認情況下ActiveRecord會查找「角色」(並且區分大小寫)。

+0

是的。你是對的。大部分時間我都使用oracle/db2/mysql。但我仍然是對的,在我的例子IS SCHEMA中是「一般」。 SQL Server 2005及更高版本具有「用戶架構分離」。當我在「Microsoft SQL Server Management Studio」中打開表格的屬性時,它被稱爲「Schema」。如果我運行以下sqls: select * from sys.schemas; select * from sys.database_principals; 它確實顯示general是一個模式,其中pricipal_id = 1,即「dbo」。 我知道我們可以使用set_table_name,但它意味着你的代碼在SQL服務器上是固定的,你不能移動到另一個數據庫沒有改變。 – Bewang 2011-04-15 05:30:59