我一直在网上寻找答案,但无济于事!
是否可以复制具有只读用户定义表类型的存储过程作为参数?
例如:
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数据库上的自定义表类型。
感谢。
答案 0 :(得分:0)
不幸的是,除非它们是CLR用户定义的类型,否则无法复制用户定义的类型。
有关可以复制哪些SQL Server对象的详细信息,请参阅此MSDN文章Publishing Data and Database Objects
。
因此,您需要在订阅者上显式创建用户定义的类型,然后复制存储过程。
注意强>
生成初始快照时有一个应用任何脚本的设置,您可以添加此Create type script
并让sql server为您管理它。
答案 1 :(得分:0)
是的,您可以复制用户类型,只需使用代码创建TSQL脚本,然后在sp_addpublication中相应地设置@pre_snapshot_script变量。运行并应用快照时,脚本将自动在订户上执行。当然,如果您更改发布者的数据类型,则需要手动更改脚本,并在不想重新启动时手动更改订阅者的类型。