【问题标题】:Replicating Stored Prcoedures复制存储过程
【发布时间】:2015-07-20 12:57:53
【问题描述】:

我一直在网上寻找这个问题的答案,但无济于事!

是否可以复制具有只读用户定义表类型作为参数的存储过程?

例如:

CREATE TYPE [UTIL].[DATE_TIME_LIST] AS TABLE (
    [ID] UNIQUEIDENTIFIER ,
    [START_DATE_TIME] DATETIME,
    [END_DATE_TIME] DATETIME
)
GO

--Publisher Side
CREATE PROCEDURE DBO.REPLICATION_TEST 
    (@REPLICATED_OBJECT UTIL.[DATE_TIME_LIST] READONLY)
AS 
BEGIN
    RETURN 
END

--Subscriber Side
CREATE PROCEDURE DBO.REPLICATION_TEST 
    (@REPLICATED_OBJECT UTIL.[DATE_TIME_LIST] READONLY)
AS 
BEGIN
    INSERT INTO DBO.LOGGING_TABLE (ID, START_DATE_TIME, END_DATE_TIME)
       SELECT 
           ID, START_DATE_TIME, END_DATE_TIME 
       FROM @REPLICATED_OBJECT

    RETURN 
END

我假设您在发布者和订阅者数据库中都需要自定义表类型。

谢谢。

【问题讨论】:

  • 如果你也复制类型,你应该没有问题。
  • @ZoharPeled 您不能复制用户定义的类型,但是是的,OP 可以复制任何 CLR 用户定义的类型。因此,OP 将需要在订阅者上显式创建用户定义类型。
  • 所以如果类型在两边,我们应该排序? ☺
  • 是的,您需要做的就是确保在出版商的文章中添加了程序并且您一切顺利,
  • 哦,我不知道...对不起...

标签: sql-server-2008 sql-server-2012 sql-server-2014


【解决方案1】:

很遗憾,您不能复制用户定义类型,除非它们是 CLR 用户定义类型。

有关可复制或不可复制的 SQL Server 对象的更多详细信息,请参阅此 MSDN 文章 Publishing Data and Database Objects

因此,您需要在订阅服务器上显式创建用户定义类型,然后将存储过程复制过来。

注意

有一个设置可以在生成初始快照时应用任何脚本,您可以添加此Create type script 并让sql server 为您管理。

【讨论】:

    【解决方案2】:

    是的,您可以复制用户类型,只需使用代码创建一个 TSQL 脚本,然后在 sp_addpublication 中适当地设置 @pre_snapshot_script 变量。当您运行并应用快照时,脚本将自动在订阅者上执行。当然,如果您在发布者处更改数据类型,则需要手动更改脚本,如果您不想重新初始化,则需要手动更改订阅者的类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-14
      • 2011-10-14
      • 1970-01-01
      • 2011-06-03
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      相关资源
      最近更新 更多