2015-07-20 42 views
2

我一直在网上寻找答案,但无济于事!复制存储的程序

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

例如:

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 

我会假设你需要在两个发布服务器和订阅数据库自定义表类型。

谢谢。

+0

如果你复制类型以及你应该没有问题。 –

+0

@ZoharPeled你不能复制用户定义类型,但是是OP可以复制任何CLR用户定义类型。因此,OP将需要在订户上明确地创建用户定义类型。 –

+0

所以提供的类型是双方我们应该排序? ☺ – Dataoverride

回答

0

不幸的是,你不能复制用户定义类型,除非它们是CLR用户定义类型。

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

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

注意

没有为应用任何脚本生成初始快照时,您可以添加此Create type script,让SQL服务器为您管理它的设置。

0

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