我正在处理一个使用2个不同数据库来存储信息的Web应用程序。这些数据库有一些数据库键,用于引用另一个数据库中的记录。我希望能够在SQL 2005中编写一个存储过程,它可以修改当前数据库中的数据,也可以出去修改其他数据库中的某些数据。这可能吗?怎么样?
答案 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脚本允许您指定脚本运行时替换的变量。在处理引用不同数据库中的表的过程时,我发现这在过去非常方便。