<質問内容>
SQLServer 2008についてです。
<要件と現在の状況>
SQLServer
DB1 mst_table_1
DB2 mst_table_1
ユーザーはデフォルトのsaと自分で作成したprocuserのみ
上記シチュエーションでDB1.mst_table_1を主として、DB2.mst_table_1に同期を取りたいです。
<やった事1>
[sql] truncate table [DB2].[dbo].mst_table_1 INSERT INTO [DB2].[dbo].mst_table_1 SELECT * FROM [DB1].[dbo].mst_table_1
これはうまくいきました。
次に、プロシージャ実装したくてプロシージャprc_programをDB2に作成しました。
<やった事2>
[prc_program] USE [DB2] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[dataMigration]() WITH EXECUTE AS 'procuser' AS BEGIN PRINT 'コメント1:BEGIN TRANSACTIONが始まるよ' BEGIN TRANSACTION PRINT 'コメント2:truncateが始まるよ' truncate table [DB2].[dbo].mst_table_2 PRINT 'コメント3:select insertが始まるよ' INSERT INTO [DB2].[dbo].mst_table_2 SELECT * FROM [DB1].[dbo].mst_table_1 PRINT 'コメント4:commitが始まるよ' COMMIT TRANSACTION END
これが動かないのです。。
saでログインして実行すると下記エラーが発生して実行できません。
エラー
現在のセキュリティ コンテキストでは、サーバー プリンシパル "procuser" はデータベース "DB1" にアクセスできません。
<調査>
PRINTの出力を確認すると、「PRINT 'コメント4:commitが始まるよ'」だけ出力されていない状態でした。
PRINTの結果から「insert into ...」が何かの原因でエラーとなっているのではと思い、以下に変えて再実行してみました。
前:INSERT INTO [DB2].[dbo].mst_table_2 SELECT * FROM [DB1].[dbo].mst_table_1
後:INSERT INTO [DB2].[dbo].mst_table_2 SELECT * FROM [DB1].[dbo].mst_table_2
結果、実行できました。
ここで質問です。
procuserでログインして
INSERT INTO [DB2].[dbo].mst_table_2 SELECT * FROM [DB1].[dbo].mst_table_1
を実行すると実行できるのに、なぜプロシージャの実行だとうまくいかないのか?
よろしくお願いいたします。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。