首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接服务器SQL Server的过程

链接服务器SQL Server的过程
EN

Stack Overflow用户
提问于 2014-01-15 04:45:10
回答 2查看 43关注 0票数 0

我必须为分布式数据库创建带参数的存储过程。我正在处理SQL Server Management Studio Express。过程必须使用如下运算符在分布式数据库中进行搜索:

代码语言:javascript
复制
UNION
INTERSECT
EXCEPT
RPC

我已经写了一个脚本,但是它不能工作。

代码语言:javascript
复制
CREATE PROC UnioProccedure
   @Par_IDProdukt int,
   @Par_IDProducent int,
   @Par_Model char(20)
AS
   INSERT dbo.PRODUKT (IDProdukt, IDProducent, Model)
   VALUES (@Par_IDProdukt, @Par_IDProducent, @Par_Model)

   SELECT (
       SELECT * FROM PRODUKT 
       UNION
       SELECT * FROM [SERVERX].Shop.dbo.myTable
       WHERE 
          IDProdukt = @Par_IDProdukt and
          IDProducent = @Par_IDProducent AND
          Model = @Par_Model) a
GO

我的第二个问题是:

基于2PC协议为两台服务器创建分布式事务存储过程。

我只需要一个模式。

请帮助:)

EN

回答 2

Stack Overflow用户

发布于 2014-01-15 04:49:23

不管链接服务器的问题如何,您的SELECT没有针对INSERT正确构造。我也看不到创建子查询的理由。为了清楚起见,在使用UNION时,您应该为列命名(UNION ALL性能更好)。

试试这个:

代码语言:javascript
复制
SELECT Col1 AS [ProdId],
       Col2 AS [IDProducent],
       Col3 AS [Model]
FROM PRODUKT AS P
UNION ALL
SELECT 
       Col1 AS [ProdId],
       Col2 AS [IDProducent],
       Col3 AS [Model]
FROM [SERVERX].Shop.dbo.myTable AS MT
WHERE 
  IDProdukt = @Par_IDProdukt and
  IDProducent = @Par_IDProducent AND
  Model = @Par_Model

显然,我不知道如何命名您的列,但在使用UNION ALL时,您需要提供一致的名称,否则您必须引用它们的位置(1,2,3 ...)这是丑陋的。

请确保更改WHERE子句,并为列添加正确的表别名前缀。

票数 0
EN

Stack Overflow用户

发布于 2014-01-15 04:52:10

你读过分布式事务吗?

http://technet.microsoft.com/en-us/library/ms191156(v=sql.105).aspx

你读过关于链接服务器的书了吗?

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

请自己阅读并尝试。你会学到比我给你答案更多的东西。

关键的一项是让MSDTC在两台服务器上运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21123643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档