2011-04-13 4 views
1

MS SQLSERVER에 액세스 할 수 JRuby를, 액티브, 그리고 JDBC를 사용하는 경우 스키마를 설정하고 속성 이름의 경우 처리 방법 : 스키마 설정하는 방법내가 SQL 서버 데이터베이스에 액세스하는 두 가지 문제가 있었다

내가 액세스해야하는 테이블은 'dbo'대신 'general'스키마 아래에 있습니다. 내가 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>입니다. 당신이 묻는 것은 소유자 인이 스키마가 아닙니다 (오라클 토지에서오고 있다고 생각하십니까?).

오라클 패러다임과 같이 "연결 한 스키마"가 아니라 객체 소유자 인 점을 감안할 때 "소유자에게 연결"하는 것이 바람직하다고 생각합니다. 묻습니다.

여기에서 설명한 set_table_name 방법을 사용하면이 경우에 완벽하게 유효합니다. Role 테이블이 dbo의 소유 일지라도 set_table_name을 사용해야합니다. 기본적으로 ActiveRecord는 "역할"(대소 문자를 구분합니다)을 찾습니다.

+0

예. 당신 말이 맞아요. 나는 oracle/db2/mysql을 대부분 사용한다. 그러나 나는 여전히 옳다. 나의 예에서는 "일반적"이다. SQL Server 2005 이상에는 "사용자 - 스키마 분리"가 있습니다. "Microsoft SQL Server Management Studio"에서 테이블의 속성을 열면 "스키마"라고합니다. 다음 sqls를 실행하는 경우 : select * from sys.schemas; select * from sys.database_principals; general는 pricipal_id = 1 인 스키마가 "dbo"임을 보여줍니다. 나는 set_table_name을 사용할 수 있지만 SQL 서버에서는 코드가 고정되어 있으므로 변경하지 않고 다른 db로 이동할 수 없음을 의미합니다. – Bewang

관련 문제