链接服务器SQL Server的过程

时间:2014-01-14 20:45:10

标签: sql sql-server stored-procedures union

我必须为分布式数据库创建存储过程whit参数。我在SQL Server Management Studio Express上工作。过程必须使用以下运算符在分布式数据库中进行搜索:

UNION
INTERSECT
EXCEPT
RPC

我写了一个脚本,但它不起作用。

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协议为两台服务器创建分布式事务的存储过程。

我只需要一个架构。

请帮助:)

2 个答案:

答案 0 :(得分:0)

无论链接的服务器问题如何,您的SELECT都没有针对INSERT正确构建。我也没有理由创建SUBQUERY。为清楚起见,您应该在使用UNION时为列添加名称(UNION ALL表现更好)。

试试这个:

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子句并使用正确的表别名为列添加前缀。

答案 1 :(得分:0)

您是否阅读过分布式交易?

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

您是否阅读过链接服务器?

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

请阅读并试一试。你将学到的不仅仅是给你答案......

关键项目是在两台服务器上运行MSDTC。