2017-08-16 100 views
1

我有和SQL服務器連接到單獨服務器上的SQL數據庫的報告表。鏈接的服務器由第三方供應商維護,所以我不想添加觸發器......我希望能夠根據在鏈接表上插入的值運行報表。試過以下內容:用於報告服務的鏈接服務器上的SQL Server觸發

CREATE TRIGGER [dbo].[RunReport] ON [linkedServer].[database].[dbo]. 
    [CustomerComments] 
    FOR INSERT 
    AS 
    exec [ReportServer].dbo.AddEvent @EventType='TimedSubscription', 
    @EventData='xxxxx' 

我得到錯誤「包含超過最大數量的前綴,最大值爲2」。無論如何觸發我的報告,而不改變鏈接的數據庫。我也創建了一個無效的鏈接表視圖。

感謝,

+0

如果使用的是完整的SQL Server(不表達),您可以創建一個作業將經常檢查鏈接表中是否有新記錄。 – Mat

+0

在執行SSRS報告的鏈接服務器上的表上創建觸發器聽起來像是一個非常糟糕的主意。 –

+0

將觸發器放在不同數據庫中的表上看起來像是一個有缺陷的概念。當這張桌子被保留下來時,你希望發生什麼?你是否想讓你的觸發器接受這些變化? – Greenspark

回答

1

撇開想法,你可以鏈接服務器上創建觸發器是這樣的:

exec [linkedServer].[database].sys.sp_executesql N'CREATE TRIGGER [dbo].[RunReport] ON [dbo]. 
    [CustomerComments] 
    FOR INSERT 
    AS 
    exec [ReportServer].dbo.AddEvent @EventType='TimedSubscription', 
    @EventData='xxxxx' 
+0

謝謝,我對這一切都很陌生。這是不好的做法嗎?我應該只將SSRS添加到實際的服務器,還是將SSRS服務器與實際的錶鏈接到服務器? –

+0

觸發器是您交易的一部分,請考慮如果您的報表服務器由於某種原因不可用會發生什麼情況。也許你應該使用Service Broker發送消息,而另一臺服務器(不是Express)可以處理它?至少你的交易將獨立於異步的消息處理而成功 – sepupic