复制存储的程序

时间:2015-07-20 12:57:54

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

我一直在网上寻找答案,但无济于事!

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

例如:

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

我认为您需要Publisher和Subscriber数据库上的自定义表类型。

感谢。

2 个答案:

答案 0 :(得分:0)

不幸的是,除非它们是CLR用户定义的类型,否则无法复制用户定义的类型。

有关可以复制哪些SQL Server对象的详细信息,请参阅此MSDN文章Publishing Data and Database Objects

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

注意

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

答案 1 :(得分:0)

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