如何获取存储过程以在同一SQL服务器上调用外部数据库?

时间:2010-01-12 23:02:19

标签: sql-server stored-procedures

我正在处理一个使用2个不同数据库来存储信息的Web应用程序。这些数据库有一些数据库键,用于引用另一个数据库中的记录。我希望能够在SQL 2005中编写一个存储过程,它可以修改当前数据库中的数据,也可以出去修改其他数据库中的某些数据。这可能吗?怎么样?

2 个答案:

答案 0 :(得分:6)

您可以完全限定表名(我假设数据库位于同一个数据库服务器上)

e.g。来自DB1中的sproc:

UPDATE DB2.dbo.MyOtherTable
SET Field = 'SomeValue'
WHERE ID = 1

答案 1 :(得分:2)

由于您在同一个SQL服务器上,这是一个相对简单的任务。

你从其他数据库引用一个表,你只需要使用该数据库名称来限定它。

那么,你可能会在哪里:

Update table1
Set col = 'val'
Where Id = @Id

你刚才:

Update DatabaseName.dbo.table1
Set col = 'val'
Where Id = @Id

请注意,.dbo是您的表所在的数据库架构。

如果您需要转到其他服务器,则需要设置链接服务器。

您可能会发现另外两件事:

<强>同义词

同义词允许您使用以下代码为引用的表创建别名:

CREATE SYNONYM [dbo].[TheOtherTable] FOR [OtherDataBase].[dbo].[OtherTable]

这使您可以在程序中使用TheOtherTable。

SQLCMD模式

当您将项目从开发升级到测试再到生产时,您可能会发现数据库名称在环境中发生了变化。如果您有多个数据库引用,这很快就会变得很痛苦。

SQLCMD脚本允许您指定脚本运行时替换的变量。在处理引用不同数据库中的表的过程时,我发现这在过去非常方便。