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

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

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

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

.NET Framework

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

解決済

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

hsk
hsk

総合スコア728

SQL Server

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

.NET Framework

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

1回答

0評価

0クリップ

5481閲覧

投稿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#

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("トリガーの起動"); } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

SQL Server

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

.NET Framework

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