2013-02-20 3 views
0

2 개의 데이터베이스를 사용하는 sql 쿼리를 수행하려고합니다. 2 개의 다른 데이터베이스 인 것처럼이 쿼리에 2 개의 연결 문자열을 사용하려면 어떻게해야합니까?C에서 쿼리에 2 개의 연결 문자열을 사용해야합니다.

var commandText = @"insert into database1 select * from database2"; 

     using (SqlConnection myConn = new SqlConnection(ConnectionString)) 
     { 
      using (SqlCommand myCommand = new SqlCommand(commandText, myConn)) 
      { 
       myConn.Open(); 
       myCommand.ExecuteNonQuery(); 
      } 
+1

가능한 경우 링크 된 서버를 만드는 것이 좋습니다. – sgeddes

+1

일반적으로 불가능합니다. 이러한 데이터베이스가 동일한 MS SQL 서버에 있으면 단일 연결 문자열과 완전한 테이블 이름을 사용할 수 있습니다. 또한 데이터베이스에서 *를 선택할 수 없습니다. * 테이블에서만 *를 선택할 수 있습니다. – Arvo

+0

데이터베이스가 동일한 서버에 있습니까? –

답변

1

수 없습니다. 그러나 데이터베이스를 제어 할 수있는 경우 단일 연결 문자열을 사용하여 교차 서버 선택에 대해 데이터베이스를 설정할 수 있습니다.

0

두 데이터베이스에 모두 액세스 할 수있는 로그인을 만들고 단일 연결 문자열 만 사용하십시오. 귀하의 검색어는 다음과 같습니다 :

string sql = "INSERT INTO [Database1].[dbo].[Table] SELECT * FROM [Database2].[dbo].[Table] 
+2

'[Database1] .dbo. [Table]'(두 번), 분명히 ...하지만 OP에 강조해야합니다. 이것은 좋은 습관이 아니며 대부분의 DBA가 당신을 잡으면 당신을 쏠 것입니다 ... –

0

나는 그렇게 생각합니다. 첫 번째 데이터베이스에서 select 문을 실행 한 다음 두 번째 데이터베이스에 삽입해야합니다.

2

두 서버가 동일한 서버 인스턴스에 있으면 두 개의 연결이 필요하지 않습니다. 귀하는 이며 에 연결하면 실질적으로입니다. 그래서 문제는 없습니다.

저장 프로 시저를 만들고 구성에서 dbnames를 매개 변수로 전달하는 것이 가장 좋은 방법이라고 생각합니다. 그런 다음 동적 쿼리를 작성하여 삽입을 수행하십시오. 그렇게하면 다른 데이터베이스 이름을보다 잘 제어 할 수 있습니다.

두 개의 서로 다른 인스턴스 또는 개별 서버에있는 경우 sp_addlinkedserver을 사용하여 연결하고 sp_addlinkedsrvlogin을 사용하여 로그인하십시오. 또한 작업을 수행 한 후 반드시 삭제하십시오.

일반적으로 오류가 발생하기 쉽기 때문에 권장하지 않습니다. 덧글에 대한 자세한 내용 ...

+0

Most 내가 만난 DBA는이 작업을 수행하는 개발자를 붙잡 으면 폭동에 빠질 것입니다. –

+0

@MarcGravell, 자세히 설명해 주시겠습니까? – Kaf

+0

대부분 데이터베이스를 사일로 (silos)로 만들고 싶습니다. 2 : 괜찮아요. 그러나 2 * 별도로 이야기하십시오, 그래서 그들은 영향을 미치지 않고 데이터베이스를 자유롭게 움직일 수 있습니다. 또한 : 각 데이터베이스가 별도의 계좌 등을 보증 할 시나리오가 있습니다. –

관련 문제