【问题标题】:Cross-server transaction with msdtc, switching context of DML without dynamic SQL带msdtc的跨服务器事务,不用动态SQL切换DML的上下文
【发布时间】:2011-03-21 04:08:50
【问题描述】:

我的设计中有两个 SQL Server 数据库。我有一个包含两个数据库的 DML 语句的事务。

问题是第二个数据库名称没有预定义。它可以是存储过程的参数。我想在每个 DML 语句中指定数据库名称和服务器名称。

不使用动态SQL,有没有办法切换语句的上下文。

或者简单地说:我如何在服务器名称和数据库名称是动态参数的 DML 语句中为服务器名称和数据库名称添加前缀?

有没有办法在不使用动态 SQL 的情况下做到这一点?或者有没有其他方法来处理这个问题?

【问题讨论】:

    标签: database sql-server-2005 stored-procedures msdtc


    【解决方案1】:

    在单独的 SP 或流程中处理 DML 不是更好的做法,而不是将它们加入现有流程中。不能在四部分名称中使用变量: 除非另有说明,否则对数据库对象名称的所有 Transact-SQL 引用都可以是以下形式的四部分名称:

    server_name .[database_name].[schema_name].object_name

    | database_name.[schema_name].object_name

    | schema_name.object_name

    |对象名

    服务器名称 指定链接服务器名称或远程服务器名称。

    数据库名称 当对象驻留在 SQL Server 的本地实例中时,指定 SQL Server 数据库的名称。当对象在链接服务器中时,database_name 指定一个 OLE DB 目录。

    架构名称 如果对象位于 SQL Server 数据库中,则指定包含该对象的架构的名称。当对象位于链接服务器中时,schema_name 指定 OLE DB 架构名称。有关架构的详细信息,请参阅用户架构分离。

    对象名称 引用对象的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多