[英]SQL insert into - from different server and credentials
我们在服务器A上存在一个数据库。服务器A还托管我们的程序代码,该程序代码将调用SQL语句。
我们在服务器B VMC-MMS
上存在另一个数据库VMIntranetTest
服务器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没有这样的表: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:语法错误
您只需要其中的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
编辑:现在尝试查询。 您已从数据库中指定了表,但未指定架构。 如果您具有适当的权限,上面的查询现在将起作用。 否则,您将需要指定架构。 对不起,没发现!
您可以使用OPENROWSET
从其他数据库中选择数据
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.