我们在服务器 A 上存在一个数据库。服务器 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)。
如何指定要用于语句的 INSERT INTO 部分的用户凭据?包含 SELECT FROM 语句的次要部分应该已经包含在我的初始连接字符串中。
谢谢,
编辑 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”的连接。
但是,我收到此错误消息:
SQLSTATE [HY000]:一般错误:“OPENROWSET”附近的 1:语法错误
编辑 2 我需要将整个 OPENROWSET 部分放在 VALUES ( ) 子句中。现在我收到一条消息:
SQLSTATE[HY000]: 一般错误: 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]:一般错误:“(”附近的 1:语法错误