2012-05-29 1 views
0

서버 A에 하나의 데이터베이스가 있습니다. 서버 A는 SQL 문을 호출하는 프로그램 코드도 호스트합니다.다른 서버 및 자격 증명에서 SQL 삽입 -

우리는 다른 데이터베이스 VMIntranetTest가 서버 A와 서버 B가 서로 다른 로그온 사용자 자격 증명이 VMC-MMS

서버 B에 존재합니다. 서버 A와 서버 B는 모두 내부 네트워크에 존재합니다.

PHP를 사용하여 다음 SQL 문을 정의했습니다. 내 연결 문자열이 서버 A.

INSERT INTO -> VMC-MMS.VMIntranetTest.dbo.TestTable <-에 연결하는 사용자 자격 증명을해야합니다 문을 실행하는 데 사용되는 다른 server.database.dbo 그래서

$strSql = 'INSERT INTO VMC-MMS.VMIntranetTest.dbo.TestTable (FirstName, LastName, Age) ' . 
        'SELECT FNAME, LNAME, AGE ' . 
        'FROM BSLIB.SQLTSTF '; 

FROM -> BSLIB.SQLTSTF <-

, 우리의 로컬 서버 (A)에 .table (서버 B).

성명의 INSERT INTO 부분에 사용할 사용자 자격 증명을 어떻게 지정합니까? SELECT FROM 문을 포함하는 2 차 부분은 이미 초기 연결 문자열로 덮여 있어야합니다.

바울의 대답에 관해서

편집 1, 감사합니다.

나는 언급 한 바와 같이 OPENROWSET을 사용하려고 시도했으며 다음 SQL 문을 가지고 있습니다.

INSERT INTO VMIntranetTest.TestTable (FirstName, LastName, Age) 
OPENROWSET('vmas400', 
      'Server=192.168.1.2;Trusted_Connection=yes;user_id=INTRAIS;password=****', 
      'SELECT FNAME, LNAME, AGE FROM BSLIB.SQLTSTF') as a 

자세히 알 수 있듯이 조금 바뀌 었습니다. 코드를 통한 연결 문자열이 서버 B "VMC-MMS"에 대한 연결을 엽니 다. 내 SQL 문 "선택"부분, OPENROWSET을 사용하여 서버 A "192.168.1.2"에 대한 연결을 엽니 다.

그러나, 나는이 오류 메시지가 점점 오전 : 나는() 안은 절을 전체 OPENROWSET 부분을 넣어하는 데 필요한 2

SQLSTATE[HY000]: General error: 1 near "OPENROWSET": syntax error

편집. 지금은 메시지를 받고 있어요 :

SQLSTATE[HY000]: General error: 1 no such table: VMIntranetTest.TestTable

편집 3

을 이제 다음과 같은 SQL

INSERT INTO VMIntranetTest.TestTable (FirstName, LastName, Age) 
select a.FNAME, a.LNAME, a.AGE FROM 
OPENROWSET('vmas400', 
      'Server=192.168.1.2;Trusted_Connection=yes;user_id=INTRAIS;password=****', 
      'SELECT FNAME, LNAME, AGE FROM BSLIB.SQLTSTF') as a 

있어 그리고이 오류가 무엇입니까 :

SQLSTATE[HY000]: General error: 1 near "(": syntax error

+0

같은 DB 호출에서이 쿼리를 함께 사용하는 이유는 무엇입니까? 그들은 서로 의존하지 않습니다. – Limey

답변

4

당신은 그냥 거기에 SELECT 문이 필요합니다. 이것을 시도하십시오 :

INSERT INTO VMIntranetTest.dbo.TestTable (a.FirstName, a.LastName, a.Age) 
SELECT a.FirstName, a.LastName, a.Age FROM 
OPENROWSET('vmas400', 
      'Server=192.168.1.2;Trusted_Connection=yes;user_id=INTRAIS;password=****', 
      'SELECT FNAME, LNAME, AGE FROM BSLIB.dbo.SQLTSTF') as a 

편집 : 지금 쿼리를 시도하십시오.스키마를 지정하지 않고 데이터베이스에서 테이블을 지정했습니다. 적절한 권한이 있으면 위의 쿼리가 작동합니다. 그렇지 않으면 스키마를 지정해야합니다. 그걸 잡지 못해서 미안해!

+0

안녕하세요.이 제안을 시도했지만 문법 오류가 발생했습니다. 이유는 무엇입니까? 오류. 내 편집 # 3을 원래 게시물로보십시오. 도와 주셔서 감사합니다!! – adam

+0

사용중인 MS SQL이 맞습니까? – Zach

+0

SQL 서버 2005이지만 연결 유형은 PDO SQLITE입니다. 그게 네가 한 일인가? – adam

1

OPENROWSET을 사용하여 다른 데이터베이스의 데이터를 선택할 수 있습니다.

http://msdn.microsoft.com/en-us/library/ms190312.aspx

+0

이것은 내가 찾고있는 것 같습니다! 나는 이것을 사용하고, 그것을 시험해보고, 결과와 함께 게시하는 방법에 대해 읽을 것이다 : 고마워요! – adam

+0

안녕하세요. 응답 주셔서 감사합니다, 나는 그것이 매우 가까운 것 같아요,하지만 구문 오류가 나타납니다. 내 업데이트 된 OP를 참조하십시오. 감사! – adam

+0

예, @zach가 주석 처리 했으므로 행 집합을 선택해야합니다. – paul