【问题标题】:SQL insert into - from different server and credentialsSQL 插入 - 从不同的服务器和凭据
【发布时间】:2012-06-03 17:51:17
【问题描述】:

我们在服务器 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 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 near "(": 语法错误

【问题讨论】:

  • 为什么将这些查询放在同一个数据库调用中?它们不相互依赖。

标签: sql-server select insert credentials


【解决方案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

编辑:立即尝试查询。您从数据库中指定了表,但没有指定架构。如果您具有适当的权限,则上述查询现在将起作用。否则,您将需要指定架构。抱歉没听清楚!

【讨论】:

  • 嗨,扎克,我已经尝试过这个建议,但遇到了语法错误……虽然我不确定为什么会收到特定错误。请参阅我对原始帖子的编辑#3。感谢您的帮助!
  • 您使用的是这个 MS SQL 吗?
  • 它是一个sql server 2005,但是连接类型是PDO SQLITE。不确定这是否是您所追求的?
  • 现在使用指定的数据库模式尝试一下。让我们知道这是否有效!
  • 感谢您的更新。我不熟悉指定 schmeas。我将开始研究,但为了快速帮助,我是否只使用您在两个同时编辑的 ..'s 中编辑的内容?
【解决方案2】:

您可以使用OPENROWSET 从不同的数据库中选择数据

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

【讨论】:

  • 这似乎是我要找的!我将了解如何使用它,尝试一下,然后返回结果:) 谢谢!
  • 嗨,保罗。感谢您的回复,我觉得它非常接近,但是我遇到了语法错误。请参阅我更新的 OP。谢谢!
  • 是的,正如@zach 所说,您需要select from 行集
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
相关资源
最近更新 更多