2015-07-20 43 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變量。當您運行並應用快照時,該腳本將自動在訂戶上執行。當然,如果您在發佈者處更改數據類型,則需要手動更改腳本,並在不想重新初始化的情況下手動更改訂閱者的類型。