質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

1回答

7882閲覧

SQL CLR トリガー作成で「SQL71501:未解決の参照があります」。外部サーバの参照方法は?

hsk

総合スコア728

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2016/07/07 11:01

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

お騒がせしました。

を参考に、順番に行ってみたところ、うまくビルドできるようになりました。

投稿2016/07/07 12:13

hsk

総合スコア728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問