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#
using System; using System.Data; using System.Data.SqlClient; using Microsoft.SqlServer.Server; public partial class Triggers { // ターゲットの既存のテーブルまたはビューを入力して、属性行のコメントを解除します [Microsoft.SqlServer.Server.SqlTrigger(Name = "SqlTrigger_Sample", Target = "dbo.TableName", Event = "FOR INSERT, UPDATE, DELETE")] public static void SqlTrigger_Sample () { SqlTriggerContext context = SqlContext.TriggerContext; switch (context.TriggerAction) { case TriggerAction.Insert: break; case TriggerAction.Update: break; case TriggerAction.Delete: break; } SqlContext.Pipe.Send("トリガーの起動"); } }
まだ回答がついていません
会員登録して回答してみよう