サーバーAに1つのデータベースが存在します。サーバーAは、SQLステートメントを呼び出すプログラムコードもホストします。
VMIntranetTest
サーバーBに別のデータベースが存在しますVMC-MMS
サーバーAとサーバーBのログオンユーザー資格は異なります。サーバーAとサーバーBはどちらも内部ネットワーク上に存在します。
PHPを使用して、次のSQLステートメントを定義しました。
$strSql = 'INSERT INTO VMC-MMS.VMIntranetTest.dbo.TestTable (FirstName, LastName, Age) ' .
'SELECT FNAME, LNAME, AGE ' .
'FROM BSLIB.SQLTSTF ';
FROM -> BSLIB.SQLTSTF <-
はローカルサーバー(A)にあるため、ステートメントの実行に使用される接続文字列には、サーバーAに接続するためのユーザー資格情報が含まれます。
INSERT INTO -> VMC-MMS.VMIntranetTest.dbo.TestTable <-
別のserver.database.dbo.table(サーバーB)です。
ステートメントのINSERTINTO部分に使用するユーザー資格情報を指定するにはどうすればよいですか?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ステートメントの「select」部分は、OPENROWSETを使用してサーバーA「192.168.1.2」への接続を開きます。
ただし、次のエラーメッセージが表示されます。
SQLSTATE [HY000]:一般エラー:1「OPENROWSET」の近く:構文エラー
編集 2OPENROWSET部分全体をVALUES()句の中に入れる必要がありました。今、私はメッセージを受け取っています:
SQLSTATE [HY000]:一般的なエラー:1そのようなテーブルはありません: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]:一般的なエラー:1 "("の近く:構文エラー