【问题标题】:Insert return records from stored procedure - SQL从存储过程插入返回记录 - SQL
【发布时间】:2018-11-12 03:30:39
【问题描述】:

下面的脚本返回一条选择记录:

EXEC [LINK_SERV].[DB_SAMPLE].[dbo].[SP_SAMPLE] '1235123'

我想将返回记录插入临时表,所以我编写了下面的脚本(假设临时表已经创建):

INSERT INTO #TempTable
EXEC [LINK_SERV].[DB_SAMPLE].[dbo].[SP_SAMPLE] '1235123'

但我收到此错误:

链接服务器“LINK_SERV”的 OLE DB 提供程序“SQLNCLI11”返回消息“合作伙伴事务管理器已禁用其对远程/网络事务的支持。

消息 7391,第 16 层,状态 2,第 25 行
无法执行该操作,因为链接服务器“LINK_SERV”的 OLE DB 提供程序“SQLNCLI11”无法开始分布式事务。

请告知具体配置以启用此功能。我在其他一些服务器上尝试了相同的代码,它可以工作。提前谢谢你。

【问题讨论】:

  • Maybe a cloned server?你能从程序中得到记录吗?其他可能性是它是否出于某种原因试图在远程数据库上构建临时表,尽管这不太可能。
  • 是的,单独执行存储过程时(第一个脚本)返回一条记录。

标签: sql sql-server


【解决方案1】:

这就是OPENQUERY() 的魅力大显身手的地方。

即像这样...

INSERT INTO dbo.MyTable2
SELECT Col1, Col2, etc
FROM dbo.MyTable1
  LEFT JOIN OPENQUERY(<<LINKEDSERVER>>,
            'SELECT BLAHBLAH 
             FROM dbo.BLAHBLAH WHERE <something> = <something>);  

【讨论】:

  • 有了这个想法,我将脚本重构为:INSERT INTO #TempTable (field1, field2) SELECT field1, field2 FROM OPENQUERY([LINK_SERV],'SET FMTONLY OFF; EXEC [DB_SAMPLE].[dbo].SP_SAMPLE ''123456''')
猜你喜欢
  • 2011-05-05
  • 2020-04-24
  • 1970-01-01
  • 2015-10-22
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
相关资源
最近更新 更多