Visual Studio 2013 Professionalの「SQL Server データベースプロジェクト」から、SQL Server 2014 Express(LocalDBではなく、別のサーバのデータベースです)のデータベースへ、SQL CLR トリガーを作成しようとしています。
目的のコード(.cs)で、SqlTrigger属性を指定してビルドすると
「SQL71501: トリガー: [dbo].[SqlTrigger...] には オブジェクト [dbo].[TableName] に対して未解決の参照があります。」
といったエラーとなります。
公開(デプロイ)させるサーバ・データベースの指定は判明しましたが、ビルドするときに参照させるサーバ・データベースはどのメニューから指定するのか、ご存知の方いらっしゃいますでしょうか?(数時間調べていますが、残念ながらまったく情報にありつけません。VS2010くらいまではLocalDBなるものをターゲットにしていなかったので、プロジェクト作成時に外部のサーバを指定できたようです)
<以下は、まったく見当違いな試行錯誤ですが、試したことを記します>
-
プロジェクトを右クリック > 追加 > 「データベース参照」画面がありますが、で表示される画面では「異なるデータべース、異なるサーバ」を指定するには「データ層アプリケーション(.dacpac)」なるファイルを指定する必要があります。
-
プロジェクトを右クリック > 「インポート」 > 「データベース」(なぜかビルド成功時でないとこの項目を選択できない)から、目的のサーバ・データベースを取り込むと.dacpacが生成されたので、これを上述の画面で指定して、データベース名とサーバ名も目的のものへ指定してみました。
しかし、まったくエラーが発生する挙動は変わりません。おまけにビルドエラーになると、なぜか.dacpacファイルが消されます。
- SqlTrigger属性の Target は、初期状態で "dbo.TableName" になっていますが、これをDatabase.dbo.TableName としても(サーバが指定されていないので)当然エラー、さらにServer.Database.dbo.TableName では、(CREATE TRIGGER 構文の制約から?)「SQL46010: TableName 付近に不適切な構文があります」エラーになります。
C#
1using System; 2using System.Data; 3using System.Data.SqlClient; 4using Microsoft.SqlServer.Server; 5 6public partial class Triggers 7{ 8 // ターゲットの既存のテーブルまたはビューを入力して、属性行のコメントを解除します 9 [Microsoft.SqlServer.Server.SqlTrigger(Name = "SqlTrigger_Sample", Target = "dbo.TableName", Event = "FOR INSERT, UPDATE, DELETE")] 10 public static void SqlTrigger_Sample () 11 { 12 SqlTriggerContext context = SqlContext.TriggerContext; 13 switch (context.TriggerAction) 14 { 15 case TriggerAction.Insert: 16 break; 17 case TriggerAction.Update: 18 break; 19 case TriggerAction.Delete: 20 break; 21 } 22 23 SqlContext.Pipe.Send("トリガーの起動"); 24 } 25}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。